一、创建顺序表结构体
1、创建一个结构体,用来储存数据
#define TRUE 1
#define FALSE 0
#define INIT_SIZE 10
typedef int ElemType;
typedef int (*Compare)(ElemType,ElemType);
typedef struct SqList
{
ElemType *data;
int length;
int ListSize;
}SqList,*SqListPtr;
二、判断顺序表是否为满函数
static int IsFull_SqDyn(SqListPtr sq)
{
if(sq->data==NULL || sq->length==sq->ListSize)
{
return TRUE;
}
return FALSE;
}
三、扩大容量函数
static int AppendSpace(SqListPtr sq)
{
ElemType *data=(ElemType *)malloc(sizeof(ElemType) * sq->ListSize *2);
if(data ==NULL) return FALSE;
sq->ListSize *= 2;
for(int i=0;i<sq->length;++i)
{
data[i]=sq->data[i];
}
free(sq->data);
sq->data=data;
return TRUE;
}
四、顺序表的初始化
int InitList_SqDyn(SqListPtr sq) //初始化
{
if(sq==NULL) exit(0);
sq->length = 0;
sq->data=(ElemType *)malloc(INIT_SIZE * sizeof(ElemType));
if(sq->data == NULL) return FALSE;
sq->ListSize =INIT_SIZE;
return TRUE;
}
五、三种插入方式函数(按位插入、头插、尾插)
int InsertList_SqDyn_Pos(SqListPtr sq,ElemType val,int pos) //按位插入
{
if(sq==NULL) exit(0);
if(pos<0 || pos>sq->length)
return FALSE;
if(IsFull_SqDyn(sq) && !AppendSpace(sq))
{
return FALSE;
}
for(int i=sq->length;i>pos;--i)
{
sq->data[i]=sq->data[i-1];
}
sq->data[pos]=val;
sq->length++;
return TRUE;
}
int InsertList_SqDyn_Head(SqListPtr sq,ElemType val) //头插
{
if(sq==NULL) exit(0);
if(IsFull_SqDyn(sq) && !AppendSpace(sq))
{
return FALSE;
}
for(int i=sq->length;i>0;--i)
{
sq->data[i]=sq->data[i-1];
}
sq->data[0]=val;
sq->length++;
return TRUE;
}
int InsertList_SqDyn_Tail(SqListPtr sq,ElemType val)
{
return InsertList_SqDyn_Pos(sq,val,sq->length);
}
六、三种删除方式函数(按位删除、头删、尾删)
int DeletaList_SqDyn_pos(SqListPtr sq,int pos)
{
if(sq==NULL) exit(0);
if(pos<0 || pos>sq->length)
return FALSE;
for(int i=pos;i<=sq->length;i++)
{
sq->data[i]=sq->data[i+1];
}
sq->length--;
}
int DeleteList_Sq_Head(SqListPtr sq)
{
return DeletaList_SqDyn_pos(sq,0);
}
int DeleteList_Sq_Tail(SqListPtr sq)
{
return DeletaList_SqDyn_pos(sq,sq->length);
}
七、清空和销毁函数
void ClearList_SqDyn(SqListPtr sq)
{
if(sq==NULL) exit(0);
for(int i=0;i<sq->length;i++)
{
sq->data[i]=0;
}
sq->length=0;
}
void DestroyList_SqDyn(SqListPtr sq)
{
return ShowList_SqDyn(sq);
}
八、输出函数
void ShowList_SqDyn(SqListPtr sq)
{
if(sq==NULL || sq->data==NULL) exit(0);
for(int i=0;i<sq->length;++i)
{
printf("%d ",sq->data[i]);
}
printf("\n");
}
九、测试用例
int main()
{
SqList sq;
InitList_SqDyn(&sq);
for(int i=0;i<5;++i)
{
InsertList_SqDyn_Pos(&sq,i,sq.length);
}
ShowList_SqDyn(&sq);
InsertList_SqDyn_Head(&sq,5);
ShowList_SqDyn(&sq);
InsertList_SqDyn_Tail(&sq,5);
ShowList_SqDyn(&sq);
DeletaList_SqDyn_pos(&sq,0);
ShowList_SqDyn(&sq);
ClearList_SqDyn(&sq);
ShowList_SqDyn(&sq);
}
end