中易网

关于线性表的插入删除操作

答案:1  悬赏:10  
解决时间 2021-02-16 22:31
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define ERROR 0
#define OVERFLOW -2
#define OK 1
typedef struct //定义顺序表结构体
{
int *data;
int length;
int listsize;
}*SqList;

void display(SqList l) //展现顺序表
{
int i;
printf("the list is:\n");
for(i=0;i<l->length;++i)
printf("%d",l->data[i]);
printf("\n");
}

int InitList(SqList l) //初始化顺序表
{
l->data=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); //开辟空间
if(!l->data) exit(OVERFLOW); //如果没有开辟成功返回错误
l->length=0;
l->listsize=LIST_INIT_SIZE;
return OK;
}

int ListInsert(SqList l,int p,int e) //实现顺序表的插入
{
int i;
if(p>l->length+1) return ERROR;
for(i=l->length-1;i>=p;--i)
//顺序表元素后移
l->data[i+1]=l->data[i];
l->data[p]=e;
l->length++;
return OK;
}

int ListDelete(SqList l,int p,int &e) //删除顺序表中元素
{
int i;
if((p<1)||(p>l->length))
return ERROR;
e=l->data[p-1];
for(i=p+1;i<l->length;i++)
l->data[p-1]=l->data[p];
l->length--; //位置前移
return e;
}

int Locate(SqList l,int e,int p)
{
p=1;
while(l->data[p]!=e)
p++;
if(p>l->length-1) return ERROR;
printf("the position is %d\n",p);
return OK;
}

void main()
{
int i,t,a,b,d,e,p;
SqList l;
l=(SqList)malloc(sizeof(l));
d=0; e=0; p=0;
InitList(l);
printf("please input the number:\n"); //输入顺序表长度
scanf("%d",&a);
printf("please input the element:\n"); //输入顺序表中元素
for(i=0;i<a;i++)
{
scanf("%d",&t);
ListInsert(l,i,t);
}
display(l); //展现数组
printf("please input the element:\n"); //输入插入元素
scanf("%d",&b);
printf("please input the position:\n"); //输入插入位置
scanf("%d",&i);
ListInsert(l,i,b);
display(l);
printf("please input the position:\n"); //输入删除位置
scanf("%d",&i);
ListDelete(l,i,b);
printf("the element is: %d\n",b); //显示删除的元素
display(l);
printf("please input the elemet you want to search:\n");
scanf("%d",&e);
Locate(l,e,p);

}

这个程序插入的时候没法实现前插,然后删除的时候不知道怎么会使老出现问题,谁能帮着看看
最佳答案
LZ的程序好乱啊!并且错误也多,l=(SqList)malloc(sizeof(l)); 明显的错误:这只是 l 只是指针,空间大小只是2b,并不是结构体大小,后面 InitList(l); 调用此函数,肯定不对啊!
还有ListInsert函数也有问题哦,当L.length=0是,后面i=l->length-1, l->data[i+1]=l->data[i];肯定错了啊,仔细看了下你的程序,删除操作也有问题:for(i=p+1;i<l->length;i++)
l->data[p-1]=l->data[p]; 没有移动完全,建议楼主仔细看下数据结构的书,你写的代码太乱了.............
PS:搞这样头痛的东西上来,楼主只给20分实在太小气了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
合力的方向是不是一定是物体的运动方向.
你干我想问下,我是一个拆装工人。在干活时从
925泰银,怎么感觉我越带越黑啊,是不是假的
工商年报应该怎么填。求大神帮忙
一个没有绘画基础的人,想要学习漫画,有什么
宏达通讯地址有知道的么?有点事想过去
请问 见してみなさいよ 这句
我是研一学生,24岁生日当天去张家界还能买学
和500万相邻的数是( )和( ,
谁知道大连开发区的国家电网月工资以及待遇怎
串来串去这个地址在什么地方,我要处理点事
新的酒精灯如何使用
上海我爱我家招聘女的吗
英国卫裤厂家在哪里
似人句是什么意思
推荐资讯
penspinner怎么读
描写反射阳光动作的句子
绮丽健身中心地址有知道的么?有点事想过去
丧尸围城2,没声音,CG也有问题
什么叫拟人化的比喻 高悬赏
河源市公安局交警支队高速公路二大队治安巡逻
盘锦双利达运输公司这个地址在什么地方,我要
20多岁男人用什么护肤品比较
米家垣寄宿制小学在哪里啊,我有事要去这个地
香港居民持有香港驾照是否能在英联邦国家驾驶
云卷晴空什么意思
驾校取消移库了吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?