关于顺序表结构指针的问题。
/* Note:Your choice is C IDE顺序表的插入与删除 */#include "stdio.h"
#define ListSize 10
typedef int DataType;
typedef struct{
DataType data[ListSize];
int length;
}seqlist;
#define n 9
#define Error printf
void deletelist(seqlist *L);
void insertlist(seqlist *L);
main()
{seqlist *L; //疑问:这里定义一个结构指针,能理解。
int i;
char c;
printf("请递增输入%d个整数(用空格间隔输入):\n",n);
for(i=0;i<n;i++)
scanf("%d",&L->data[i]); //这里直接使用这个指针。我理解应该是先定义一个结构变量,;
printf("请选择:\n"); //然后结构指针指向结构变量,这里没有定义结构变量等于没分配空间,
printf("A-------------插入----------\n"); //怎么会用L->data?
printf("B-------------删除----------\n");
printf("C-------------退出----------\n");
scanf("\n%c",&c);
while(c!='c' && c!='C')
{if(c=='A' || c=='a') insertlist(L);
else deletelist(L);
printf("当前顺序表中的数据为:\n");
for(i=0;i<L->length;i++)
printf("%3d",L->data[i]);
printf("\n请再选择:\n");
printf("A-------------插入----------\n");
printf("B-------------删除----------\n");
printf("C-------------退出----------\n");
scanf("\n%c",&c);
}
}
void insertlist(seqlist *L)
{int x,i,j;
printf("\n请输入要插入的整数:");
scanf("\n%d",&x);
printf("\n在下面序列中插入%d\n",x);
for(i=0;i<L->length;i++)
printf("%3d",L->data[i]);
i=0;
while(i<L->length && x>L->data[i]) i++;
if(i<0 || i>L->length+1)
Error("\n插入位置错误\n");
else if(L->length>=ListSize) Error("\n表溢出无法插入");
else {printf("\n将数据%d插入到第%d号的位置上\n",x,i);
for(j=L->length-1;j>=i;j--)
L->data[j+1]=L->data[j];
L->data[i]=x;
L->length++;
}
}
void deletelist(seqlist *L)
{int x,i,j,num;
printf("\n请输入要删除的整数");
scanf("\n%d",&x);
printf("\n在下面序列中删除%d\n",x);
for(i=0;i<L->length;i++)
printf("%3d",L->data[i]);
i=0;num=0;
while(i<L->length && x>L->data[i]) i++;
if(x!=L->data[i]) Error("\n没有找到要删除的整数\n");
else {num++;
while(L->data[i+1]==x)
{i++;num++;}
printf("\n删除原表中从第%d个位置以后的%d个数据%d\n",i,num,x);
for(j=i+1;j<=L->length-1;j++)
L->data[j-num]=L->data[j];
L->length=L->length-num;
}
}
[[it] 本帖最后由 ctw888 于 2008-11-20 15:52 编辑 [/it]]