书中题目要求是:将顺序表中值为x(我写成num)的结点删除
#include"stdio.h"
#define MAXSIZE 60
typedef struct A
{
int data;
char n[10];
}ElemType;
typedef struct B
{
ElemType elem[MAXSIZE];
int length;
}SeqList;
main() //主函数
{
void init_SeqList(SeqList *);
void del_SeqList(SeqList *,int);
SeqList *L;
int num,i;
init_SeqList(L);
for(i=1;i<=2;i++)
{
scanf("%d%s",&L->elem[i].data,L->elem[i].n);
L->length++;
}
printf("删除值:");
scanf("%d",&num);
del_SeqList(L,num);
printf("%d\t%s\n",L->elem[1].data,L->elem[1].n);
}
void init_SeqList(SeqList *L) //初始化顺序表
{
L->length = 0;
}
void del_SeqList(SeqList *L,int num) //查找值为x的结点,将其删除
{
int del,i;
del=1;
while(del<=L->length)
{
if(L->elem[del].data == num)
{
i=del;
do
{
L->elem[i]=L->elem[i+1];
i++;
}while(i<=L->length);
L->length--;
}
del++;
}
}
请大侠给分析分析错在哪里。
当将以上代码改成:
#include"stdio.h"
#define MAXSIZE 60
typedef struct A
{
int data;
}ElemType;
typedef struct B
{
ElemType elem[MAXSIZE];
int length;
}SeqList;
main() //主函数
{
void init_SeqList(SeqList *);
void del_SeqList(SeqList *,int);
SeqList *L;
int num,i;
init_SeqList(L);
for(i=1;i<=2;i++)
{
scanf("%d",&L->elem[i].data);
L->length++;
}
printf("删除值:");
scanf("%d",&num);
del_SeqList(L,num);
printf("%d\t\n",L->elem[1].data);
}
void init_SeqList(SeqList *L) //初始化顺序表
{
L->length = 0;
}
void del_SeqList(SeqList *L,int num) //查找值为x的结点,将其删除
{
int del,i;
del=1;
while(del<=L->length)
{
if(L->elem[del].data == num)
{
i=del;
do
{
L->elem[i]=L->elem[i+1];
i++;
}while(i<=L->length);
L->length--;
}
del++;
}
}
它能得到理想答案。。。但是将主函数for语句中的i<=2改成i<=n(n>2)时,感觉无语。