#include?<stdlib.h>
#include?<time.h>
#define?TRUE?1
#define?FALSE?0
#define?OK1
#define?ERROR?0
#define?INFEASIBLE?-1
#define?OVERFLOW-2
typedef?int?Status;
#define?LIST_INIT_SIZE?100/*初始分配的順序表長度*/
#define?LISTINCREMENT?10?/*溢出時,順序表長度的增量*/
typedef?int?ElemType;?/*定義表元素的類型*/
typedef?struct?Sqlist?{
ElemType?*elem;/*存儲空間的基地址*/
int?length;/*順序表的當前長度*/
int?listsize;?/*當前分配的存儲空間*/
}SqList;
Status?InitList_Sq(SqList?&L)?{?//?算法2.3
//?構造壹個空的線性表L。
L.elem?=?(ElemType?*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if?(!L.elem)?return?ERROR;//?存儲分配失敗
L.length?=?0;?//?空表長度為0
L.listsize?=?LIST_INIT_SIZE;?//?初始存儲容量
return?OK;
}?//?InitList_Sq
Status?InsertDatum(SqList?&L,?ElemType?x)?{
int?i;
for(i?=?0;?i?<?L.length;++i)?{
if(L.elem[i]?==?x)?{
printf("表中有元素%d,插入失敗。\n",x);
return?ERROR;
}
}
if(L.length?==?L.listsize)?{
L.elem?=?(ElemType?*)realloc(L.elem,(L.listsize?+?LISTINCREMENT)*sizeof(ElemType));
if?(!L.elem)?return?ERROR;
L.listsize?+=?LISTINCREMENT;
}
for(i?=?L.length;?i?>?0;?--i)
L.elem[i]?=?L.elem[i?-?1];
L.elem[0]?=?x;
++L.length;
return?OK;
}
Status?ModifyDatum(SqList?&L,?ElemType?x,?ElemType?y)?{?//?把值x改為y
int?i;
for(i?=?0;?i?<?L.length;?++i)?{
if(L.elem[i]?==?y)?{
printf("位置%d有數據%d。\n",i?+?1,y);
printf("替換失敗!\n");
return?ERROR;
}
}
for(i?=?0;?i?<?L.length;?++i)?{
if(L.elem[i]?==?x)?{
L.elem[i]?=?y;
return?OK;
}
}
printf("表中沒有元素%d,修改失敗。\n",x);
return?ERROR;
}
Status?DeleteDatum(SqList?&L,?ElemType?x)?{
int?i,flag?=?0;
for(i?=?0;?i?<?L.length?&&?!flag;++i)
if(L.elem[i]?==?x)?flag?=?1;
if(flag?==?0?||?L.length?==?0)?{
printf("表中沒有找到元素%!刪除失敗。\n",x);
return?ERROR;
}
for(;?i?<?L.length?-?1;?++i)
L.elem[i]?=?L.elem[i?+?1];
--L.length;
return?OK;
}
int?FindDatum(SqList?&L,?ElemType?x)?{
int?i;
for(i?=?0;?i?<?L.length;?++i)
if(L.elem[i]?==?x)?return?i?+?1;
printf("沒有找到元素%d。\n",x);
return?0;
}
void?Show(SqList?&L)?{
for(int?i?=?0;?i?<?L.length;?++i)?{
if(i%10?==?0)?printf("\n");
printf("%5d",L.elem[i]);
}
printf("\n");
}
void?DestroyList(SqList?&L)?{
if(L.elem)?free(L.elem);
}
int?main()?{
int?i,pos;
ElemType?x,y;
SqList?L;
srand((unsigned)time(NULL));
if(!InitList_Sq(L)) {
printf("初始化未成功。");
return?1;
}
for(i?=?0;?i?<?LIST_INIT_SIZE;?++i)
if(InsertDatum(L,rand()%1000)?==?ERROR)?--i;
Show(L);
printf("請輸入待插入數據?:?");
scanf("%d",&x);
InsertDatum(L,x);
Show(L);
printf("測試替換函數!\n");
printf("請輸入被替換數和替換數?:?");
scanf("%d%d",&x,&y);
ModifyDatum(L,x,y);
Show(L);
printf("請輸入欲查詢數據?:?");
scanf("%d",&x);
pos?=?FindDatum(L,x);
if(pos?!=?-1)?printf("%d在位置%d。\n",x,pos);
Show(L);
DestroyList(L);
return?0;
}