// 顺序表参考程序
#include
#include
#define OK 1
#define ERROR 0
int MAX_SIZE = 100;
typedef int DataType;
typedef struct {
DataType* pData;
int length;
}SeqList;
SeqList* InitList(SeqList* L)
{
if (NULL==L)
{
L=(SeqList*)malloc(sizeof(SeqList));
}
L->pData=(DataType*)malloc(MAX_SIZE*sizeof(DataType));
if(!L->pData)
{
return NULL;
}
L->length=0;
return L;
}
int DestroyList(SeqList* L)
{
if(L->pData)
{
free(L->pData);
L->pData=NULL;
}
L->length=0;
return 1;
}
int InsertElem(SeqList* L, DataType x, int i)
{
int k=0;
if(!L->pData ||
L->length>=MAX_SIZE ||
i-1>L->length)
{
printf("顺序表或是数据位置有问题, 不能插入!");
return ERROR;
}
for(k=L->length-1; k>=i-1;
k--)
{
L->pData[k+1]=L->pData[k];
}
L->pData[i-1]=x;
L->length++;
return OK;
}
int DeleteElem(SeqList* L, int i)
{
int k=0;
if(!L->pData || 0==L->length ||
i>=L->length)
{
return ERROR;
}
for(k=i; klength; k++)
{ // 注意: 若DataType里面有指针变量的话, 应先释放其占用的空间
L->pData[i-1]=L->pData[i];
}
L->length--;
return OK;
}
int ReverseList(SeqList* L)
{
int k=0;
DataType temp;
if (L->length<=1)
{
return OK;
}
for(k=0; klength/2;
k++)
{
temp=L->pData[k];
L->pData[k]=L->pData[L->length-1-k];
L->pData[L->length-1-k]=temp;
}
return OK;
}
void PrintDataType(DataType x) // 方便使用
{
printf("%d", x);
printf("\n");
}
void PrintList(SeqList* L)
{
int k=0;
if(!L->pData)
{
printf("顺序表不存在!\n");
return;
}
if(0==L->length)
{
printf("顺序表是空的!\n");
return;
}
printf("SSSSSSSSSSSSSSSSSSSSSSSS\n");
for(k=0; klength; k++)
{
PrintDataType(L->pData[k]);
}
printf("EEEEEEEEEEEEEEEEEEEEEEEE\n");
}
int SetEmpty(SeqList* L)
{
if(!L->pData)
{
return ERROR;
}
L->length=0;
return OK;
}
int GetListLength(SeqList* L)
{
if(L->pData)
{
return L->length;
}
return -1;
}
DataType GetPrior(SeqList* L, DataType x)
{
int k=0;
if(!L->pData ||
0==L->length)
{
printf("顺序表不存在或是为空表!\n");
}
for (k=1; klength; k++) //
从第2个元素开始找
{
if (L->pData[k]==x)
{
return L->pData[k-1];
}
}
exit(1);
}
DataType GetNext(SeqList* L, DataType x)
{
int k=0;
if(!L->pData ||
0==L->length)
{
printf("顺序表不存在或是为空表!\n");
}
for (k=0; klength-1; k++) //
从第2个元素开始找
{
if (L->pData[k]==x)
{
return L->pData[k+1];
}
}
exit(1);
}
DataType GetElem(SeqList* L, int i)
{
if(0>=i || !L->pData ||
i>L->length)
{
printf("顺序表不存在或是为空表!\n");
}
return L->pData[i-1];
}
DataType GetPosition(SeqList* L, DataType x)
{
int k=0;
if(!L->pData)
{
printf("顺序表不存在!\n");
}
for(k=0; klength; k++)
{
if (x==L->pData[k])
return k+1;
}
return -1; // 表示顺序表中无此元素
}
int IsEmpty(SeqList* L)
{
if(!L->pData)
{
printf("顺序表不存在!\n");
}
return L->length==0;
}
void main()
{
SeqList* L=NULL;
L=InitList(L); // 初始化顺序表
PrintList(L); // 打印顺序表
InsertElem(L, 10, 1); // 把元素10插入到第1个位置
InsertElem(L, 12, 1); // 把元素10插入到第1个位置
InsertElem(L, 14, 1); // 把元素10插入到第1个位置
PrintList(L); // 打印顺序表
ReverseList(L);
PrintList(L); // 打印顺序表
PrintDataType(GetNext(L, 12));
PrintDataType(GetPrior(L, 12));
PrintDataType(GetElem(L, 2));
DeleteElem(L, 2);
PrintList(L);
printf("%d\n", GetPosition(L, 10));
printf("%d\n", GetListLength(L));
if(IsEmpty){
printf("顺序表是空的\n");
}else{
printf("顺序表是非空的\n");
}
SetEmpty(L); // 把顺序表置空
PrintList(L); // 打印顺序表
DestroyList(L); // 不要忘了
PrintList(L); // 打印顺序表
if (NULL!=L)
free(L);
}