SqList.h如下:
<pre name="code" class="cpp">#ifndef __SQLIST_H
#define __SQLIST_H
typedef struct Sqlist
{
int *data;
int usedsize;
int size;
}Sqlist;
void InitList(Sqlist *list);//初始化顺序表
void Destory(Sqlist *list);//摧毁顺序表
bool ListEmpty(Sqlist *list);//判断顺序表是否为空
int ListLength(Sqlist *list);//取得顺序表长度
bool GetElem(Sqlist *list,int i,int *e);//取得顺序表中第i个元素的值放到e
bool PriElem(Sqlist *list,int cur,int *e);//返回cur的前驱
bool NextElem(Sqlist *list,int cur,int *e);//返回cur的后继
bool Insert_Head(Sqlist *list,int var);//头插元素
bool Insert_Tail(Sqlist *list,int var);//尾插元素
bool Insert_Sq(Sqlist *list,int pos,int var);//在顺序表第pos个元素前插入var
int Search(Sqlist *list,int var,int pos);//判断顺序表中pos后是否含有值为var的元素
bool Delete(Sqlist *list,int pos);//删除第pos个元素
void Show(Sqlist *list);//打印
void Traverselist(Sqlist *list);//就地逆置
#endif
SqList.c如下:
<pre name="code" class="cpp">#include"SqList.h"
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define MAXSIZE 20
#define INCSIZE 10
void InitList(Sqlist *list)//初始化顺序表
{
list->data=(int *)malloc(sizeof(int)*MAXSIZE);
assert(list->data);
list->size=MAXSIZE;
list->usedsize=0;
}
void Destory(Sqlist *list)//摧毁顺序表
{
free(list->data);
list->size=0;
list->usedsize=0;
}
bool ListEmpty(Sqlist *list)//判断顺序表是否为空
{
if(list->usedsize==0)
return true;
return false;
}
int ListLength(Sqlist *list)//取得顺序表长度
{
return list->usedsize;
}
bool GetElem(Sqlist *list,int i,int *e)//取得顺序表中第i个元素的值放到e
{
if(i<0 || i>list->usedsize)
return false;
*e=list->data[i];
return true;
}
bool PriElem(Sqlist *list,int cur,int *e)//返回cur的前驱
{
int pos=Search(list,cur,0);
if(pos<=0)
return false;
*e=list->data[pos-1];
return true;
}
bool NextElem(Sqlist *list,int cur,int *e)//返回cur的后继
{
int pos=Search(list,cur,0);
if(pos<0 || pos==list->usedsize-1)
return false;
*e=list->data[pos+1];
return true;
}
bool Insert_Head(Sqlist *list,int var)//头插元素
{
if(list->usedsize==list->size)
{
list->data=(int *)realloc(list->data,sizeof(int)*(list->size+INCSIZE));
assert(list->data);
list->size+=INCSIZE;
}
for(int i=list->usedsize;i>0;i--)
{
list->data[i]=list->data[i-1];
}
list->data[0]=var;
list->usedsize++;
return true;
}
bool Insert_Tail(Sqlist *list,int var)//尾插元素
{
if(list->usedsize==list->size)
{
list->data=(int *)realloc(list->data,sizeof(int)*(list->size+INCSIZE));
assert(list->data);
list->size+=INCSIZE;
}
list->data[list->usedsize]=var;
list->usedsize++;
return true;
}
bool Insert_Sq(Sqlist *list,int pos,int var)//在顺序表第pos个元素前插入var
{
if(pos<1 ||pos>list->usedsize+1)
return false;
for(int i=list->usedsize-1;i>=pos-1;i--)
{
list->data[i+1]=list->data[i];
}
list->data[pos-1]=var;
list->usedsize++;
return true;
}
int Search(Sqlist *list,int var,int pos)//判断顺序表中pos后是否含有值为var的元素
{
if(pos<0 ||pos>list->usedsize+1)
return -1;
for(int i=pos;i<list->usedsize;i++)
{
if(list->data[i]==var)
return i;
}
return -1;
}
bool Delete(Sqlist *list,int pos)//删除第pos个元素
{
if(pos<1 ||pos>list->usedsize)
return false;
for(int i=pos;i<list->usedsize;i++)
{
list->data[i-1]=list->data[i];
}
list->usedsize--;
return true;
}
void Show(Sqlist *list)//打印
{
for(int i=0;i<list->usedsize;i++)
{
printf("%d ",list->data[i]);
}
printf("\n");
}