user-0 提问: 顺序表插入和删除

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 2 楼 weixin_45682176 的回复:[quote=引用 1 楼 自信男孩的回复:]因为4和Y中间除了逗号之外，还有一个空格，去掉这个空格试试。  #include<stdio.h> #include<stdlib.h>  #define MAX 100 typedef struct SeqList {     char Data[MAX];     int last; }SeqList;  SeqList * CreateSeqList(SeqList *L) {     int z=1;     int i=0;     char x;     printf("\n\t输入结点数，以'x'为结束标志\n");     while(z)     {         printf("\t输入一个字母，按回车");         scanf("%c",&x);         getchar();         if(x!='x') {             L->Data[i]=x;             i++;         } else {             z=0;         }     }//;     L->last = i;     return L; }  int SearchList(SeqList *L,char X) {     int i=0;     while((i<=L->last)&&(L->Data[i]!=X))         i++;     if(i<=L->last)         return i;     else return -1; }  int InsList(SeqList *L,int i,char x) {     int j;     if(L->last==MAX)     {         printf("表已满，无法插入！\n");         return -1;     }     if(i<0||i>L->last+1)     {         printf("位置不合法!!!\n");         return 0;     }     for(j=L->last;j>=i-1;j--)         L->Data[j]=L->Data[j-1];     L->Data[i-1]=x;     L->last++;     return 1; }  void DeList(SeqList *L,int i) {     int j;     if(i<1||i>L->last)     {         printf("不存在第i个元素");         //return 0;         return;     }     for(j=i-1;j<=L->last-1;j++)         L->Data[j]=L->Data[j-1];     L->last--; }  int LenList(SeqList *L) {     return L->last; }  void ShowList(SeqList *L) {int i;     if(L->last==0)         printf("顺序表为空\n");     printf("遍历顺序表如下\n");     for(i=0;i<L->last;i++)         printf("\tData[%d]=%c",i,L->Data[i]);     printf("\t总共%d个元素\n",L->last); }   int main() {     int s,i,I,j=1;     char x;     int n;     SeqList *L;     L=(SeqList *)malloc(sizeof (struct SeqList));     L->last=-1;     while(j)     {         printf("线性表子链系统 \n");         printf("1--------建  表\n");         printf("2--------插  入\n");         printf("3--------删  除\n");         printf("4--------显  示\n");         printf("5--------查  找\n");         printf("6--------求表长\n");         printf("7--------返  回\n");         printf("请选择菜单号(1~7)!!!\n");         scanf("%d",&s);         getchar();          switch (s) {             case 1:                 L = CreateSeqList(L);                 break;              case 2:                 printf("输入插入的位置i和插入的数据x\n");                 scanf("%d ,%c",&i,&x);                 I=InsList(L,i,x);                 if(I==1)                     printf("插入成功!!!\n");                 break;              case 3:                 printf("输入删除数据的位置:");                 //scanf("%d", i);                 scanf("%d", &i);                 DeList(L,i);                 break;              case 4:                 if(L->last==-1)                     printf("请先建立线性表\n");                 else                     ShowList(L);                 break;              case 5:                 printf("请输入查找元素:");                 scanf("%c",&x);                 I=SearchList(L,x);                 printf("该元素的下标为：%d\n",I);                 break;              case 6:                 n=LenList(L);                 printf("线性表长度为：%d\n",n);                 break;              case 7:                 j=0;exit (0);                 break;              default:                 printf("\n输入错误，请重新输入！！！");                 break;         }         /*            if(s==1)            L=CreateSeqList(L);            else            if(s==2)            {            printf("输入插入的位置i和插入的数据x\n");            scanf("%d,%c",&i,&x);            I=InsList(L,i,x);            if(I==1)            printf("插入成功!!!\n");            }            else            if(s==3)            {            printf("输入删除数据的位置:");            scanf("%d",i);            DeList(L,i);            }            else            if(s==4)            {            if(L->last==-1)            printf("请先建立线性表\n");            else            ShowList(L);            }            else            if (s==5)            {            printf("请输入查找元素:");            scanf("%c",&x);            I=SearchList(L,x);            printf("该元素的下标为：%d\n",I);            }            else            if(s==6)            {            n=LenList(L);            printf("线性表长度为：%d\n",n);            }            else            if(s==7)            { j=0;exit (0);            }            else printf("\n输入错误，请重新输入！！！");            */     }     return 0;  } 供参考～ 已解决，我前天把输入位置和输入数据分开了，就成功了，谢谢[/quote] 对于s的if else建议改成switch ... case 其他还有问题，建议对比代码找出自己的问题～

user: user-0
content: 引用 1 楼 自信男孩的回复:因为4和Y中间除了逗号之外，还有一个空格，去掉这个空格试试。  #include<stdio.h> #include<stdlib.h>  #define MAX 100 typedef struct SeqList {     char Data[MAX];     int last; }SeqList;  SeqList * CreateSeqList(SeqList *L) {     int z=1;     int i=0;     char x;     printf("\n\t输入结点数，以'x'为结束标志\n");     while(z)     {         printf("\t输入一个字母，按回车");         scanf("%c",&x);         getchar();         if(x!='x') {             L->Data[i]=x;             i++;         } else {             z=0;         }     }//;     L->last = i;     return L; }  int SearchList(SeqList *L,char X) {     int i=0;     while((i<=L->last)&&(L->Data[i]!=X))         i++;     if(i<=L->last)         return i;     else return -1; }  int InsList(SeqList *L,int i,char x) {     int j;     if(L->last==MAX)     {         printf("表已满，无法插入！\n");         return -1;     }     if(i<0||i>L->last+1)     {         printf("位置不合法!!!\n");         return 0;     }     for(j=L->last;j>=i-1;j--)         L->Data[j]=L->Data[j-1];     L->Data[i-1]=x;     L->last++;     return 1; }  void DeList(SeqList *L,int i) {     int j;     if(i<1||i>L->last)     {         printf("不存在第i个元素");         //return 0;         return;     }     for(j=i-1;j<=L->last-1;j++)         L->Data[j]=L->Data[j-1];     L->last--; }  int LenList(SeqList *L) {     return L->last; }  void ShowList(SeqList *L) {int i;     if(L->last==0)         printf("顺序表为空\n");     printf("遍历顺序表如下\n");     for(i=0;i<L->last;i++)         printf("\tData[%d]=%c",i,L->Data[i]);     printf("\t总共%d个元素\n",L->last); }   int main() {     int s,i,I,j=1;     char x;     int n;     SeqList *L;     L=(SeqList *)malloc(sizeof (struct SeqList));     L->last=-1;     while(j)     {         printf("线性表子链系统 \n");         printf("1--------建  表\n");         printf("2--------插  入\n");         printf("3--------删  除\n");         printf("4--------显  示\n");         printf("5--------查  找\n");         printf("6--------求表长\n");         printf("7--------返  回\n");         printf("请选择菜单号(1~7)!!!\n");         scanf("%d",&s);         getchar();          switch (s) {             case 1:                 L = CreateSeqList(L);                 break;              case 2:                 printf("输入插入的位置i和插入的数据x\n");                 scanf("%d ,%c",&i,&x);                 I=InsList(L,i,x);                 if(I==1)                     printf("插入成功!!!\n");                 break;              case 3:                 printf("输入删除数据的位置:");                 //scanf("%d", i);                 scanf("%d", &i);                 DeList(L,i);                 break;              case 4:                 if(L->last==-1)                     printf("请先建立线性表\n");                 else                     ShowList(L);                 break;              case 5:                 printf("请输入查找元素:");                 scanf("%c",&x);                 I=SearchList(L,x);                 printf("该元素的下标为：%d\n",I);                 break;              case 6:                 n=LenList(L);                 printf("线性表长度为：%d\n",n);                 break;              case 7:                 j=0;exit (0);                 break;              default:                 printf("\n输入错误，请重新输入！！！");                 break;         }         /*            if(s==1)            L=CreateSeqList(L);            else            if(s==2)            {            printf("输入插入的位置i和插入的数据x\n");            scanf("%d,%c",&i,&x);            I=InsList(L,i,x);            if(I==1)            printf("插入成功!!!\n");            }            else            if(s==3)            {            printf("输入删除数据的位置:");            scanf("%d",i);            DeList(L,i);            }            else            if(s==4)            {            if(L->last==-1)            printf("请先建立线性表\n");            else            ShowList(L);            }            else            if (s==5)            {            printf("请输入查找元素:");            scanf("%c",&x);            I=SearchList(L,x);            printf("该元素的下标为：%d\n",I);            }            else            if(s==6)            {            n=LenList(L);            printf("线性表长度为：%d\n",n);            }            else            if(s==7)            { j=0;exit (0);            }            else printf("\n输入错误，请重新输入！！！");            */     }     return 0;  } 供参考～ 已解决，我前天把输入位置和输入数据分开了，就成功了，谢谢

user: user-2
content: 因为4和Y中间除了逗号之外，还有一个空格，去掉这个空格试试。  #include<stdio.h> #include<stdlib.h>  #define MAX 100 typedef struct SeqList {     char Data[MAX];     int last; }SeqList;  SeqList * CreateSeqList(SeqList *L) {     int z=1;     int i=0;     char x;     printf("\n\t输入结点数，以'x'为结束标志\n");     while(z)     {         printf("\t输入一个字母，按回车");         scanf("%c",&x);         getchar();         if(x!='x') {             L->Data[i]=x;             i++;         } else {             z=0;         }     }//;     L->last = i;     return L; }  int SearchList(SeqList *L,char X) {     int i=0;     while((i<=L->last)&&(L->Data[i]!=X))         i++;     if(i<=L->last)         return i;     else return -1; }  int InsList(SeqList *L,int i,char x) {     int j;     if(L->last==MAX)     {         printf("表已满，无法插入！\n");         return -1;     }     if(i<0||i>L->last+1)     {         printf("位置不合法!!!\n");         return 0;     }     for(j=L->last;j>=i-1;j--)         L->Data[j]=L->Data[j-1];     L->Data[i-1]=x;     L->last++;     return 1; }  void DeList(SeqList *L,int i) {     int j;     if(i<1||i>L->last)     {         printf("不存在第i个元素");         //return 0;         return;     }     for(j=i-1;j<=L->last-1;j++)         L->Data[j]=L->Data[j-1];     L->last--; }  int LenList(SeqList *L) {     return L->last; }  void ShowList(SeqList *L) {int i;     if(L->last==0)         printf("顺序表为空\n");     printf("遍历顺序表如下\n");     for(i=0;i<L->last;i++)         printf("\tData[%d]=%c",i,L->Data[i]);     printf("\t总共%d个元素\n",L->last); }   int main() {     int s,i,I,j=1;     char x;     int n;     SeqList *L;     L=(SeqList *)malloc(sizeof (struct SeqList));     L->last=-1;     while(j)     {         printf("线性表子链系统 \n");         printf("1--------建  表\n");         printf("2--------插  入\n");         printf("3--------删  除\n");         printf("4--------显  示\n");         printf("5--------查  找\n");         printf("6--------求表长\n");         printf("7--------返  回\n");         printf("请选择菜单号(1~7)!!!\n");         scanf("%d",&s);         getchar();          switch (s) {             case 1:                 L = CreateSeqList(L);                 break;              case 2:                 printf("输入插入的位置i和插入的数据x\n");                 scanf("%d ,%c",&i,&x);                 I=InsList(L,i,x);                 if(I==1)                     printf("插入成功!!!\n");                 break;              case 3:                 printf("输入删除数据的位置:");                 //scanf("%d", i);                 scanf("%d", &i);                 DeList(L,i);                 break;              case 4:                 if(L->last==-1)                     printf("请先建立线性表\n");                 else                     ShowList(L);                 break;              case 5:                 printf("请输入查找元素:");                 scanf("%c",&x);                 I=SearchList(L,x);                 printf("该元素的下标为：%d\n",I);                 break;              case 6:                 n=LenList(L);                 printf("线性表长度为：%d\n",n);                 break;              case 7:                 j=0;exit (0);                 break;              default:                 printf("\n输入错误，请重新输入！！！");                 break;         }         /*            if(s==1)            L=CreateSeqList(L);            else            if(s==2)            {            printf("输入插入的位置i和插入的数据x\n");            scanf("%d,%c",&i,&x);            I=InsList(L,i,x);            if(I==1)            printf("插入成功!!!\n");            }            else            if(s==3)            {            printf("输入删除数据的位置:");            scanf("%d",i);            DeList(L,i);            }            else            if(s==4)            {            if(L->last==-1)            printf("请先建立线性表\n");            else            ShowList(L);            }            else            if (s==5)            {            printf("请输入查找元素:");            scanf("%c",&x);            I=SearchList(L,x);            printf("该元素的下标为：%d\n",I);            }            else            if(s==6)            {            n=LenList(L);            printf("线性表长度为：%d\n",n);            }            else            if(s==7)            { j=0;exit (0);            }            else printf("\n输入错误，请重新输入！！！");            */     }     return 0;  } 供参考～