顺序表的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:顺序表的基本操作。

编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。

(1)建立一个顺序表,含有n个数据元素。

(2)输出顺序表及顺序表的长度。

(3)在顺序表中删除值为x的结点或者删除给定位置i的结点。

(4)将顺序表就地逆置,即利用原表的存储空间将线性表(a1,a2,...,a n)逆置为(a n,a n-1,...,a1)。

(5)将顺序表按升序排序。

(6)设顺序表中的数据元素递增有序,将x插入到顺序表的适当位置上,以保持该表的有序性。

(7)将两个顺序有序表A和B合并为一个有序表C。

(8)在主函数中设计一个简单的菜单,分别测试上述算法。

#include

#include

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

#define OK 1

#define OVERFLOW -2

#define ERROR 0

typedef int ElemType;

typedef struct{

ElemType *elem;

int length;

int listsize;

}SqList;

int cmp(const void *a,const void *b)

{

return *(int*)a-*(int*)b;

}

//创建一个空表

int InitList(SqList &L)

{

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//分配空间

if(!L.elem)

return OVERFLOW;

L.length=0;

L.listsize=LIST_INIT_SIZE;

return OK;

}

//在创建的空表中插入数据

int ListInsert(SqList &L,int i,ElemType e)

{

ElemType* newbase;

//ElemType* q;

if(i<0 || i>L.length+1)

return ERROR;

if(L.length>=L.listsize)//当前空间已满,增加新空间

{

newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!newbase)

return OVERFLOW;

L.elem=newbase;

L.listsize+=LISTINCREMENT;

}

L.elem[i]=e;

//printf("%d ",L.elem[i]);

L.length++;

return OK;

}

//删除位置为i的节点

int ListDelete(SqList &L,int i)

{

ElemType* p;

ElemType* q;

if(i<0 || i>L.length)

return ERROR;

p=&(L.elem[i-1]);

//e=*p;

q=L.elem+L.length-1;

for(++p;p<=q;p++)

*(p-1)=*p;

L.length--;

return OK;

}

//在顺序表中删除数据x

int DeleteX(SqList &L, int x)

{

ElemType* p;

int i;

for(i=0;i

if(L.elem[i]==x)

{

break;

}

p=&L.elem[i];

//free(p);

for(int j=i;j

{

L.elem[j]=L.elem[j+1];

}

L.length--;

return OK;

}

//反转顺序表

int TurnArrond(SqList &L)//翻转顺序表{

ElemType* p;

ElemType* q;

int t;

p=&(L.elem[0]);

q=L.elem+L.length-1;

for(p;p

{

t=*q;

*q=*p;

*p=t;

}

return OK;

}

//升序排列顺序表

int ABC(SqList &L)

{

int a[10000];

int i;

for(i=0;i

a[i]=L.elem[i];

qsort(a,L.length,sizeof(a[0]),cmp);

for(i=0;i

L.elem[i]=a[i];

return OK;

}

//把顺序表升序排列后插入元素e

int ListInsertABC(SqList &L,ElemType e)

{

ElemType* newbase;

int i,j;

if(L.length+1>=L.listsize)//当前空间已满,增加新空间

{

newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!newbase)

return OVERFLOW;

L.elem=newbase;

L.listsize+=LISTINCREMENT;

}

for(i=0;i

if(e

break;

for(j=L.length;j>i;j--)

{

L.elem[j]=L.elem[j-1];

}

L.length++;

L.elem[j]=e;

//printf("%d ",L.elem[i]);

return OK;

}

//合并顺序表L,L1为L2

int MergeList(SqList L,SqList L1,SqList &L2)

{

ElemType* pa;

ElemType* pb;

ElemType* pc;

ElemType* pa_last;

ElemType* pb_last;

pa=L.elem;

相关文档
最新文档