顺序表c语言的程序代码

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

//----------------------------线性表的动态分配顺序存储结构-------------------------

# include "stdio.h"

# include "malloc.h"

# include "stdlib.h"

# define M 5 //线性表存储空间的初始分配量

# define N 2 //线性表存储空间的分配增量

typedef struct {

int *elem; //存储空间基址

int length; //当前长度

int listsize; //当前分配的存储容量(以sizeof(int)为单位)

}SqList;

int InitList(SqList *L) { // 构造一个空的线性表L

L->elem=(int *)malloc(M*sizeof(int));

if(!L->elem) // 存储分配失败

exit(-2);

L->length=0; // 空表长度为0

L->listsize=M; // 初始存储容量

return 1;

}

int IntPut(SqList *L) { //输入数据

int i,e;

printf ("请输入你要输入数据的个数:\n");

scanf ("%d",&e);

if (1>e||5

printf ("你输入的数据有误!请重新输入:\n");

scanf ("%d",&e);

}while(1>e||5

}

printf ("输入正确!\n请开始输入数据并用空格隔开:\n");

for (i=0;i

scanf ("%d",&L->elem[i]);

L->length=L->length+1;

}

return 1;

}

int OutPut(SqList *L) { //输出数据

int i;

for (i=0;ilength;i++) {

printf ("%d",L->elem[i]);

printf ("\n");

}

return 1;

}

int Find(SqList *L) { //在顺序线性表L中查找第i个值,若找到,则打印出对应的值

int i;

printf ("请输入你要查找的数据序号:\n");

scanf ("%d",&i);

if (1>i||L->length

printf ("你输入的数据有误!请重新输入:\n");

scanf ("%d",&i);

}while(1>i||L->length

}

printf ("输入的序号正确!\n你输入的序号所对应的数据是:\n");

printf ("%d\n",L->elem[i-1]); //打印出对应的值

return 0;

}

int ListInsert(SqList *L) { // 在顺序线性表L的第i个元素之前插入新的元素e,

// i的合法值为1≤i≤ListLength(L)+1 int *y,*q,*p,i,e;

printf ("请输入你要插入的数据序号:\n");

scanf ("%d",&i);

if (1>i||(L->length+1)

printf ("你输入的数据有误!请重新输入:\n");

scanf ("%d",&i);

}while(1>i||(L->length+1)

}

printf ("输入的序号正确!\n请输入你要插入的数据:\n");

scanf ("%d",&e);

if(L->length>=L->listsize) { // 当前存储空间已满,增加容量

y=(int *)realloc(L->elem,(L->listsize+N)*sizeof(int));

if(!y) // 存储分配失败

exit(-2);

L->elem=y; // 新基址

L->listsize+=N; // 增加存储容量

}

q=&(L->elem[i-1]); // q为插入位置

for(p=&(L->elem[L->length-1]);p>=q;--p) // 插入位置及之后的元素右移

*(p+1)=*p;

if(L->length>6){

printf ("插入失败,线性表L已满!\n");

return 1;

}

*q=e; // 插入e

++L->length; // 表长增1

return 1;

}

int ListDelete(SqList *L,int &e) { // 在顺序线性表L中删除第i个元素,并用e返回其值。

// i的合法值为1≤i≤ListLength(L) int *p,*q,i;

printf ("请输入你要删除的数据序号:\n");

scanf ("%d",&i);

if (1>i||L->length

printf ("你输入的数据有误!请重新输入:\n");

scanf ("%d",&i);

}while(1>i||L->length

}

printf ("输入的序号正确!\n");

p=&(L->elem[i-1]); // p为被删除元素的位置

e=*p; // 被删除元素的值赋给e

q=L->elem+L->length-1; // 表尾元素的位置

for(++p;p<=q;++p) // 被删除元素之后的元素左移

*(p-1)=*p;

--L->length; // 表长减1

return 1;

}

void menu() { //菜单

system("cls");

相关文档
最新文档