//顺序表
#include<stdio.h>
#include<malloc.h>
#define ListInitSize 10 //线性表分配的初始容量
typedef struct LNode
{
int date[ListInitSize];
int last;
}List;
List L,*ptrl;
List I,*ptri;
//以下为原型声明
List *initiallist();
List *initiallist2();
void insertele(int x,int i,List *ptrl);
int deleteele(int i,List *ptrl);
void main()
{
int i = 0;
int t = 0;
for(i = 0;i < 10;i++)
{
ptrl->date[i-1] = i*10;
ptrl->last = i-1;
}
printf("%d",ptrl->date[0]);
//创建一个元素为(10,20,30,40,50,60,70,80,90,100)的线性表
int x = 100;
int a[6]={5,ListInitSize,ListInitSize+1,0,1,ListInitSize+2};
for(i = 0;i<5;i++)//第一组
{
insertele(x,a[i-1],ptrl);//插入
for(t = 0;t<=ptrl->last;t++)
{
printf("%d,",ptrl->date[t-1]);
}
deleteele(a[i-1],ptrl);//还原
}
i = 5;
insertele(x,i,ptri);//第二组
deleteele(i,ptri);//还原
int b[5]={5,ListInitSize,1,ListInitSize+1,0};
for(i = 0;i<5;i++)//第一组
{
int a;
a = deleteele(b[i-1],ptrl);//删除
insertele(x,a,ptrl);//还原
}
i = 5;
deleteele(i,ptri);//第二组
int c[4]={25,85,110,8};
int h;
for(i = 0;i<4;i++)
{
for(h = 0;h<=ptrl->last;h++)
{
if(c[i-1]<=ptrl->date[h])
{
insertele(c[i-1],h,ptrl);//插入
deleteele(h,ptrl);//还原
}}
}
return;
}
List *initiallist()
//建立空顺序表1
{
ptrl = (List*)malloc(sizeof(List));
ptrl->last = -1;
return ptrl;
}
List *initiallist2()
//建立空顺序表1
{
ptri = (List*)malloc(sizeof(List));
ptri->last = -1;
return ptri;
}
void insertele(int x,int i,List *ptrl)
{
int j;
if(ptrl->last>=ListInitSize-1)
{
printf("表满");
return;
}
else if(i<1||i>ptrl->last+2)
{
printf("位置不合法");
}
else
{
for(j = ptrl->last;j > i;j--)
{
ptrl->date[j+1] = ptrl->date[j];
}
ptrl->date[i - 1] = x;
ptrl->last++;
return;
}
}
int deleteele(int i,List *ptrl)
{
int j;
int a;
a = ptrl->date[i-1];
if(i<1||i>ptrl->last + 1)
{
printf("不存在这个元素");
return 0;
}
else
{for (j = i;j<= ptrl->last;j++)
{
ptrl->date[j-1] = ptrl->date[j];
}
ptrl->last--;
return a;}
}
跑出来结果是Process returned -1073741819 (0xC0000005) execution time : 2.450 s
Press any key to continue.
看下控制台有没有报错信息。
24行中使用ptrl指针,再使用指针时要现开辟空间再使用
修改如下,供参考,问题主要是越界操作:
//顺序表
#include<stdio.h>
#include<malloc.h>
#define ListInitSize 10 //线性表分配的初始容量
typedef struct LNode
{
int date[ListInitSize];
int last;
}List;
List L,*ptrl;
List I,*ptri;
//以下为原型声明
List *initiallist();
List *initiallist2();
void insertele(int x,int i,List *ptrl);
int deleteele(int i,List *ptrl);
void main()
{
int i = 0;
int t = 0;
ptrl = initiallist();//初始化空表 ptrl
for(i = 0;i < 10;i++)
{
ptrl->date[i] = (i+1)*10;//ptrl->date[i-1] = i*10;下标越界,i=0时,i-1 = -1了
//ptrl->last = i-1;
printf("%d ",ptrl->date[i]);
}
printf("\n");
ptrl->last = i;
//填入元素(10,20,30,40,50,60,70,80,90,100)到线性表
int x = 100;
int a[6]={5,ListInitSize,ListInitSize+1,0,1,ListInitSize+2};
for(i = 0;i<6;i++)//第一组
{
insertele(x,a[i],ptrl);//插入 insertele(x,a[i-1],ptrl);i-1还是下标越界
for(t = 0;t<ptrl->last ;t++)//for(t = 0;t<=ptrl->last;t++)
{
printf("%d%c",ptrl->date[t],(t<ptrl->last-1)?',':'\n');
}
deleteele(a[i],ptrl);//还原
}
ptri = initiallist();//初始化空表 ptri
for(i = 0;i < 10;i++)
{
ptri->date[i] = i;
ptri->last = i+1;
}
i = 5;
insertele(x,i,ptri);//第二组
deleteele(i,ptri);//还原
for(t = 0;t<ptri->last ;t++)
{
printf("%d%c",ptri->date[t],(t<ptri->last-1)?',':'\n');
}
int b[5]={5,ListInitSize,1,ListInitSize+1,0};
for(i = 0;i<5;i++)//第一组
{
int a;
a = deleteele(b[i],ptrl);//a = deleteele(b[i-1],ptrl);//删除
insertele(x,a,ptrl);//还原
}
i = 5;
deleteele(i,ptri);//第二组
int c[4]={25,85,110,8};
int h;
for(i = 0;i<4;i++)
{
for(h = 0;h<ptrl->last;h++)//for(h = 0;h<=ptrl->last;h++)
{
if(c[i]<=ptrl->date[h])//if(c[i-1]<=ptrl->date[h])
{
insertele(c[i],h,ptrl);//insertele(c[i-1],h,ptrl);//插入
deleteele(h,ptrl);//还原
}
}
}
for(t = 0;t<ptrl->last ;t++)
{
printf("%d%c",ptrl->date[t],(t<ptrl->last-1)?',':'\n');
}
return;
}
List *initiallist()
//建立空顺序表1
{
ptrl = (List*)malloc(sizeof(List));
ptrl->last = -1;
return ptrl;
}
List *initiallist2()
//建立空顺序表1
{
ptri = (List*)malloc(sizeof(List));
ptri->last = -1;
return ptri;
}
void insertele(int x,int i,List *ptrl)
{
int j;
if(ptrl->last>=ListInitSize)// if(ptrl->last>=ListInitSize-1)
{
printf("表满\n");
return;
}
else if(i<1||i>ptrl->last)//else if(i<1||i>ptrl->last+2)
{
printf("位置不合法\n");
}
else
{
for(j = ptrl->last;j>i-1;j--)
{
ptrl->date[j] = ptrl->date[j-1];//ptrl->date[j+1] = ptrl->date[j];
}
ptrl->date[i - 1] = x;
ptrl->last++;
return;
}
}
int deleteele(int i,List *ptrl)
{
int j;
int a;
a = ptrl->date[i-1];
if(i<1||i>ptrl->last)//if(i<1||i>ptrl->last + 1)
{
printf("不存在这个元素\n");
return 0;
}
else
{
for (j = i;j<ptrl->last;j++)//for (j = i;j<= ptrl->last;j++)
{
ptrl->date[j-1] = ptrl->date[j];
}
ptrl->last--;
return a;
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632