顺序链表插入错误
程序代码:
#include<stdio.h> #include<malloc.h> #define TURE 1 #define ERROR 0 #define MAXSIZE 100 typedef struct { int elem[MAXSIZE]; int last; }SqList; void InitList(SqList *L,int e) { L->last=e-1; }//组建 int InsertList(SqList *L,int i,int e) { int k; if(i<1||i>L->last+2) { printf("插入不符合\n"); return ERROR; } if(L->last>=MAXSIZE-1) { printf("线性表已满\n"); return ERROR; } for(k=L->last;k>=i-1;k--) { L->elem[k+1]=L->elem[k]; } e=L->elem[i-1]; L->last++; return TURE; }//插入 int DeleteList(SqList *L,int i,int *e) { int k; if(i<1||i>L->last+1) { printf("不合法\n"); return ERROR; } *e=L->elem[i-1]; for(k=i;k<=L->last;k++) { L->elem[k-1]=L->elem[k]; } L->last--; return TURE; }//删除 int SearchList(SqList L,int e) { int i=0; while(i<=L.last&&L.elem[i]!=e) i++; if(i<=L.last) { return i+1; } else return ERROR; } //查找 void menu() { printf("第一步首先建立一个线性表\n"); printf("1 建立\n"); printf("2 插入\n"); printf("3 删除\n"); printf("4 查找\n"); printf("5 遍历输出\n"); printf("6 退出\n"); } int main() { int i,e; int num,location,length,number; int *data; SqList *L; data=(int *)malloc(sizeof(int)); menu(); while(1) { printf("请输入你的序号\n"); scanf("%d",&num); switch(num) { case 1: L=(SqList *)malloc(sizeof(SqList)); printf("请输入线性表的长度\n"); scanf("%d",&length); InitList(L,length); printf("请依次输入线性表的长度\n"); for(i=0;i<length;i++) { scanf("%d",&number); L->elem[i]=number; } printf("插入成功\n"); break; case 2: printf("请输入你要插入的数值和位置\n"); scanf("%d %d",&e,&location); if(InsertList(L,location,e)==TURE) printf("插入成功\n"); else printf("插入失败\n"); break; case 3: printf("请输入你要删除的节点\n"); scanf("%d",&i); if(DeleteList(L,i,data)) printf("删除成功,你所删除的节点的值是%d\n",*data); else printf("删除失败\n"); break; case 4: printf("请输入你要查找的数值\n"); scanf("%d",&e); location=SearchList(*L,e); printf("你所查找的是%d个节点数\n",location); break; case 5: for(i=0;i<=L->last;i++) { printf("%d ",L->elem[i]); } break; case 6: return 0; } } printf("\n"); return 0; }
谁能帮我看看,执行插入的时候怎么不符合常理呢?