顺序表c语言的程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;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");