#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_SIZE 100
#define XZ 10
typedef int Status;
typedef struct{
int *elem;//对应元素
int length;//顺序表长度
int Sq_rl;//顺序表容量
}q;
Status chuangjian(q &L,int t);
Status chushihua(q &L,int s);
Status Insert_q(q &L,int e,int pos);
Status Delete_q(q &L,int e,int pos);
Status chuangjian(q &L,int t)
{
if(chushihua(L,t)!=OK)
{
printf("初始化失败,即将退出\n");
exit(OVERFLOW);
}
printf("初始化成功,请输入%d所生成的顺序表:",t);
for(int i=0;i<t;i++)
{
scanf("%d",&L.elem[i]);
L.length++;
}
return OK;
}
Status chushihua(q &L,int t)
{
L.elem=(int *)malloc(LIST_SIZE*sizeof(int));
if(L.elem==NULL)//!L.elem
exit(OVERFLOW);
L.length=0;
L.Sq_rl=LIST_SIZE;
return OK;
}
Status shuchu(q &L,int n)
{
printf("所生成的顺序表为:\n");
if(L.length==0)
{
printf("空表\n");
exit(OVERFLOW);
}
for(int i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
return OK;
}
Status Insert_q(q &L,int e,int pos)
{
int *newbase,*q,*p;
if(pos<1||e>L.length+1)
exit(OVERFLOW);
if(L.length>=L.Sq_rl)//说明空间不够用了
{
newbase=(int*)realloc(L.elem,(LIST_SIZE+XZ)*sizeof(int));
if(newbase==NULL)//!newbase
{
exit(OVERFLOW);
}
L.elem=newbase;
L.Sq_rl+=XZ;
}
L.length++;
q=&L.elem[pos-1];//取要插入元素的位置的地址
for(p=&L.elem[L.length-1];p>=q;p--){
*(p+1)=*(p);
}
*q=e;//给指针赋值
return OK;
}
Status Delete_q(q &L,int e,int pos)
{
int *q,*p;
if(pos<1||pos>L.length)
{
exit(OVERFLOW);
}
p=&L.elem[pos-1];
for(q=p+1;q<=&L.elem[L.length-1];q++)
{
*(q-1)=*q;
}
L.length--;
return OK;
}
int main(void)
{
q La;
int n,e,wz;
printf("请输入顺序表的个数\n");
scanf("%d",&n);
if(chuangjian(La,n)!=OK)
{
printf("顺序生成表异常,即将退出\n");
exit(OVERFLOW);//exit函数的使用:非0就会退出,非零状态码表示异常
}
shuchu(La,n);//输出未增删改查的顺序表
printf("请输入要插入的数据:");
scanf("%d",&e);
printf("请输入要插入的位置:");
scanf("%d",&wz);
if(Insert_q(La,e,wz)!=OK)
{
printf("插入非法!即将退出\n");
exit(OVERFLOW);
}
shuchu(La,n);//请输入插入之后的顺序表
printf("请输入要删除的数据:");
scanf("%d",&e);
printf("请输入要删除的位置:");
scanf("%d",&wz);
if(Delete_q(La,e,wz)!=OK)
{
printf("删除位置非法,即将退出\n");
exit(OVERFLOW);
}
shuchu(La,n);//请输出删除之后的顺序表
return 0;
}
顺序表的建立,插入,删除等操作
最新推荐文章于 2024-09-07 10:46:54 发布