大佬帮忙看一下这个关于顺序表基本操作的问题

//顺序表
#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