永发信息网

数据结构(C语言描述) 线性表实验

答案:6  悬赏:30  手机版
解决时间 2021-04-06 23:08
数据结构(C语言描述) 线性表实验
最佳答案
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int * elem;
int length;
int listsize;
}SqList;
//SqList sq;
void InitList_Sq(SqList *sq) //初始化列表
{
sq->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
sq->length=0;
sq->listsize=LIST_INIT_SIZE;
printf("---申请空间成功---!\n");
}
void GetElem(SqList *sq,int i)//获取第i位置元素的值
{
int *p;
p=&(sq->elem[i-1]);
printf("%d",*p);
printf("\n");
}
int ListInsert_Sq(SqList *sq,int i,int a)//在i位置之前插入a
{
int *p,*q;
if(i<=0||i>sq->length+1)
{
printf("---位置不合法---!\n");
return 0;
}
if(sq->length>=sq->listsize)
{
int* newbase=(int *)realloc(sq->elem,(sq->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
{
printf("申请空间溢出\n");
return 0;
}
sq->elem=newbase;
sq->listsize+=LISTINCREMENT;
}
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=&(sq->elem[sq->length-1]);//q指向最后一个元素
for(;q>=p;--q) *(q+1)=*q;
*p=a;
++sq->length;
return 1;
}
int ListDelete_Sq(SqList *sq,int i) //删除i位置上的值
{
int *p,*q;
if(i<1||i>sq->length) return 0;
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=sq->elem+sq->length-1;//q指向最后一个元素
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
--sq->length;
return 1;
}
void visit(SqList *sq)//输出数据
{
int i=1;
for(;i<=sq->length;i++)
{
int *p;
p=&sq->elem[i-1];
printf("%d",*p);
printf(" ");
}
}
void main()
{
int i=1,a=0,boo=1,number=0;
SqList s,*sq;
sq=&s;
InitList_Sq(sq);
printf("初始化空表\n");
printf("输入数据个数:\n");
scanf("%d",&number);
printf("输入%d个数据:",number);
printf("\n");
for(;i<=number;i++)
{
scanf("%d",&a);
if(boo=ListInsert_Sq(sq,i,a))
{
printf("---插入成功!---\n");
}
else
{
printf("---插入不成功,重新插入---!\n");
i=i-1;
}
}
printf("输出所有元素\n");
visit(sq);
printf("\n");
printf("输出删除的位置:");
scanf("%d",&a);
if(boo=ListDelete_Sq(sq,a))
{
printf("---数据删除成功!---\n");
}else
{
printf("---没有删除成功---\n");
}
printf("输出所有元素:\n");
visit(sq);
printf("\n");
printf("输出要显示数据的位置:");
scanf("%d",&a);
printf("输出%d位置数值\n",a);
if(a<0||a>sq->length)
{
printf("---输出位置的数据不存在---\n");
}
else
{
GetElem(sq,a);
}

}
以上是可直接运行的源程序
运行结果:
---申请空间成功---!
初始化空表
输入数据个数:
3
输入1个数据:3
---插入成功!---
输入2个数据;8
---插入成功!---
输入3个数据:5
---插入成功!---
输出所有元素:3 5 8
输出删除的位置:2
---数据删除成功!---
输出所有元素;3 8
输出要显示数据的位置:2
"输出2位置数值:8
全部回答
#include
#include
#define MAXSIZE 1000
typedef int DataType;
typedef struct node{
DataType data[MAXSIZE];
int length;
}SeqList,*PSeqList;
PSeqList Init_SeqList(void)
{
PSeqList SeqListPoint;
SeqListPoint=(PSeqList)malloc(sizeof(SeqList));
if(SeqListPoint)
SeqListPoint->length=0;
return SeqListPoint;
}
int Insert_SeqList(PSeqList SeqListPoint,int i,DataType x)
{
int j;
if(!SeqListPoint)
{
printf("表不存在");
return -2;
}
if(SeqListPoint->length>=MAXSIZE)
{
printf("表溢出");
return -1;
}
if(i<1||i>SeqListPoint->length+1)
{
printf("插入位置不合法");
return 0;
}
for(j=SeqListPoint->length-1;j>=i-1;j--)
SeqListPoint->data[j+1]=SeqListPoint->data[j];
SeqListPoint->data[i-1]=x;
SeqListPoint->length++;
return 1;
}
int Delete_seq(PSeqList SeqListPoint,int t,int x)
{
int i,j;
if(!SeqListPoint)
{
printf("表不存在");
return -1;
}
switch(t)
{
case 1:
for(i=0;ilength;i++)
if(x==SeqListPoint->data[i])
{
for(j=i;jlength;j++)
SeqListPoint->data[j]=SeqListPoint->data[j+1];
printf("你已经成功删除元素%d\n",x);
SeqListPoint->length--;
return 1;
}
printf("该表中不存在该元素!");
return 0;
case 2:
if(x<1||x>SeqListPoint->length)
{
printf("删除位置不合法!\n");
return 0;
}
for(i=x;ilength;i++)
SeqListPoint->data[i-1]=SeqListPoint->data[i];
SeqListPoint->length--;
printf("你已经成功删除%d位置的元素\n",x);
break;
default:
break;
}
return 0;
}
int Location_SeqList(PSeqList SeqListPoint,DataType x)
{
int i=0;
if(!SeqListPoint)
{
printf("表不存在");
return -1;
}
while(ilength&&SeqListPoint->data[i]!=x)
i++;
if(i>=SeqListPoint->length)
return 0;
else
return (i+1);
}
int Print_SeqList(PSeqList SeqListPoint)
{
int i;
if(!SeqListPoint)
{
printf("表不存在");
return -1;
}
if(!SeqListPoint->length)
{
printf("表中没有元素!!!\n");
return 0;
}
printf("表中元素:\n");
for(i=0;ilength;i++)
printf("%d ",SeqListPoint->data[i]);
return 1;
}
void Destroy_SeqList(PSeqList *SeqListPoint)
{
if(*SeqListPoint)
free(*SeqListPoint);
*SeqListPoint=NULL;
}
int main()
{
PSeqList SeqListPoint;
int n,i,j,x,num,flag=0,log=0;
char ch;
while(1)
{
printf("***********线性表**********\n");
printf(" [1]创建一个线性表 \n");
printf(" [2]在表中插入记录 \n");
printf(" [3]删除表中的记录 \n");
printf(" [4]检索表中的元素 \n");
printf(" [5]查看表中的元素 \n");
printf(" [6]统计表中元素的个数 \n");
printf(" [7]退出 \n");
printf("***************************\n");
printf("请输入操作数:");
scanf("%d",&num);
switch(num)
{
case 1:
system("cls");
if(flag)
{
printf("你已经创建了一个表!\n");
break;
}
SeqListPoint=Init_SeqList();
printf("你已经创建了一个表!\n");
flag++;
break;
case 2:
system("cls");
if(!flag)
{
printf("请先创建一个表!");
break;
}
printf("请选择插入位置\n");
printf("[1]直接插入\n");
printf("[2]选择插入\n");
printf("请输入操作数:");
scanf("%d",&num);
switch(num)
{
case 1:
system("cls");
printf("请在表中插入n个记录:\n");
printf("n=");
scanf("%d",&n);
j=SeqListPoint->length;
for(i=j;i {
scanf("%d",&x);
Insert_SeqList(SeqListPoint,i+1,x);
}
log++;
break;
case 2:
system("cls");
printf("请输入插入位置和元素:\n");
scanf("%d %d",&i,&x);
Insert_SeqList(SeqListPoint,i,x);
log++;
break;
default:
printf("您的输入有误!!!");
}
break;
case 3:
if(!flag)
{
printf("请先创建一个表!\n");
break;
}
if(!log)
{
printf("请先插入元素!\n");
break;
}
printf("请选择按何种方式删除表中元素\n");
printf("[1]按元素删除\n");
printf("[2]按序号删除\n");
scanf("%d",&num);
switch(num)
{
case 1:
printf("请输入删除的元素:\n");
scanf("%d",&x);
Delete_seq(SeqListPoint,num,x);
break;
case 2:
printf("请输入删除元素的序号:\n");
scanf("%d",&x);
Delete_seq(SeqListPoint,num,x);
break;
default:
printf("您的输入有误!!!");
}
break;
case 4:
if(!flag)
{
printf("请先创建一个表!\n");
break;
}
if(!log)
{
printf("请先插入元素!\n");
break;
}
printf("请输入您要检索的元素:");
scanf("%d",&x);
if(Location_SeqList(SeqListPoint,x))
printf("该元素位于%d位置",Location_SeqList(SeqListPoint,x));
else
printf("表中没有元素%d\n",x);
break;
case 5:
if(!flag)
{
printf("请先创建一个表!\n");
break;
}
if(!log)
{
printf("请先插入元素!\n");
break;
}
Print_SeqList(SeqListPoint);
break;
case 6:
if(!flag)
{
printf("请先创建一个表!\n");
break;
}
printf("表中元素个数为:%d\n",SeqListPoint->length);
break;
case 7:
if(flag)
{
Destroy_SeqList(&SeqListPoint);
return 0;
}
return 0;
default:
printf("您的输入有误!!!");
}
printf("\n按Enter键继续");
scanf("%c",&ch);
scanf("%c",&ch);
system("cls");
}

}
程序运行结果截图如下:
主画面:

选择操作数1,创建一个线性表:

按Enter键继续,返回主画面,

选择操作数2,在表中插入记录,

选择插入位置,选择1,直接插入,

输入n=5,插入5个记录,

按Enter键继续,返回主画面,选择操作数【3】删除表中的记录,选择【1】按元素删除,输入删除的元素55如下,

按Enter键继续,返回主画面,选择操作数【5】查看表中的元素

记录55已经成功删除
按Enter键继续,返回主画面,选择操作数【3】删除表中的记录,选择【1】按元素删除,输入删除的元素22如下,

表中不存在记录22,所以删除失败。
截过图,粘贴不进去,如果你把分给我,我把代码和截图发给你
答案已发到你的邮箱,请查收追问有一个错误……怎么办
我用C++写的一个线性表的类,原意是想为自己设计一个专用的库,以后方便使用,但是你要求用C语言的话,我就没时间专门为你写额...不过你想要的话,我可以把我写的那个给你看,作为参考也行!
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int * elem;
int length;
int listsize;
}SqList;
//SqList sq;
void InitList_Sq(SqList *sq) //初始化列表
{
sq->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
sq->length=0;
sq->listsize=LIST_INIT_SIZE;
printf("---申请空间成功---!\n");
}
void GetElem(SqList *sq,int i)//获取第i位置元素的值
{
int *p;
p=&(sq->elem[i-1]);
printf("%d",*p);
printf("\n");
}
int ListInsert_Sq(SqList *sq,int i,int a)//在i位置之前插入a
{
int *p,*q;
if(i<=0||i>sq->length+1)
{
printf("---位置不合法---!\n");
return 0;
}
if(sq->length>=sq->listsize)
{
int* newbase=(int *)realloc(sq->elem,(sq->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
{
printf("申请空间溢出\n");
return 0;
}
sq->elem=newbase;
sq->listsize+=LISTINCREMENT;
}
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=&(sq->elem[sq->length-1]);//q指向最后一个元素
for(;q>=p;--q) *(q+1)=*q;
*p=a;
++sq->length;
return 1;
}
int ListDelete_Sq(SqList *sq,int i) //删除i位置上的值
{
int *p,*q;
if(i<1||i>sq->length) return 0;
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=sq->elem+sq->length-1;//q指向最后一个元素
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
--sq->length;
return 1;
}
void visit(SqList *sq)//输出数据
{
int i=1;
for(;i<=sq->length;i++)
{
int *p;
p=&sq->elem[i-1];
printf("%d",*p);
printf(" ");
}
}
void main()
{
int i=1,a=0,boo=1,number=0;
SqList s,*sq;
sq=&s;
InitList_Sq(sq);
printf("初始化空表\n");
printf("输入数据个数:\n");
scanf("%d",&number);
printf("输入%d个数据:",number);
printf("\n");
for(;i<=number;i++)
{
scanf("%d",&a);
if(boo=ListInsert_Sq(sq,i,a))
{
printf("---插入成功!---\n");
}
else
{
printf("---插入不成功,重新插入---!\n");
i=i-1;
}
}
printf("输出所有元素\n");
visit(sq);
printf("\n");
printf("输出删除的位置:");
scanf("%d",&a);
if(boo=ListDelete_Sq(sq,a))
{
printf("---数据删除成功!---\n");
}else
{
printf("---没有删除成功---\n");
}
printf("输出所有元素:\n");
visit(sq);
printf("\n");
printf("输出要显示数据的位置:");
scanf("%d",&a);
printf("输出%d位置数值\n",a);
if(a<0||a>sq->length)
{
printf("---输出位置的数据不存在---\n");
}
else
{
GetElem(sq,a);
}

}
以上是可直接运行的源程序
运行结果:
---申请空间成功---!
初始化空表
输入数据个数:
3
输入1个数据:3
---插入成功!---
输入2个数据;8
---插入成功!---
输入3个数据:5
---插入成功!---
输出所有元素:3 5 8
输出删除的位置:2
---数据删除成功!---
输出所有元素;3 8
输出要显示数据的位置:2
"输出2位置数值:8
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
switch循环怎么用,请举个简单的例子。
我爱你曹可欣,求做藏头诗
跪求大神帮忙剪切一下这张图
熟地当归甘草芥穗赤苟川芎红花杜仲是偏方吗
strokeit 按住右键向上滚动滚轮怎么设置,是W
13591777301这个电话号码是谁的这个人欠我工
win pe进不去是什么原因?还有,做系统到百分
为什么我的电脑一会有网速一会没网速
请问什么是VI 它的全称是什么?
打开 页面 192.168.1.1 输入 管理 用户名 密
天津的电信手机卡在陕西时怎么查话费流量
康福盲人推拿足浴会所这个地址在什么地方,我
周公解梦梦见鬼现身吃饭
圆筒梳如何清洗?
我想我女朋友了,不知道她想我没有,不知道她
推荐资讯
槐米和槐子是同一种物品吗
03G101-3图集下载
公共卫生间有10个蹲便器位,用机械按压式冲洗
为什么一顿饭不吃饭肚子就会很瘦,很扁,但是只
oracle的DBA如何获得工作经验,得到这个职业
有谁在上海喝过珠峰冰川这个牌子的矿泉水?昨
三国杀李儒和贾诩哪个更好?
请问各位高人:假设两棵一模一样的榔榆和榆树
求妹汁的3~4下载地址。
天津建筑类中级职称最低多少钱一个
有没有人有不是传销的好项目?
Java中List集合问题。如图,我把数组arr转成
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?