#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);
}
这个程序插入的时候没法实现前插,然后删除的时候不知道怎么会使老出现问题,谁能帮着看看
关于线性表的插入删除操作
答案:1 悬赏:10
解决时间 2021-02-16 22:31
- 提问者网友:紫柔同归
- 2021-02-15 22:15
最佳答案
- 二级知识专家网友:荒唐后生
- 2021-02-15 23:37
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分实在太小气了
还有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分实在太小气了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯