//数据结构C语言版(清华大学_唐国民_第3版)
//单链表功能实现,书 P25 例子2.3.3,与书上代码有些许出入,不用在意,重要的是思路
#include
#include
typedef char ElementType;
typedef struct LNode* List;
typedef char ElementType;
struct LNode{
ElementType Data;
List Next;
};
void Create(List Prtl);
void Insert(List Prtl,ElementType x,int i);
void Delete(List Prtl,int i);
void Printout(List Prtl);
int main()
{
ElementType cmd,x;
int i;
List Prtl=(List)malloc(sizeof(struct LNode));
Prtl->Next = NULL;
Create(Prtl);
Printout(Prtl);
do{
printf("i,I...插入\n");
printf("d,D...删除\n");
printf("q,Q...退出\n");
do{
fflush(stdin);
scanf("%c",&cmd);
}while((cmd!='i')&&(cmd!='I')&&(cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q'));
switch (cmd){
case 'i':
case 'I':
printf("请输入你要插入的数据:");
fflush(stdin);
scanf("%c",&x);
printf("请输入你要插入的位置;");
scanf("%d",&i);
Insert(Prtl,x,i);
Printout(Prtl);
break;
case 'd':
case 'D':
printf("请输入你要删除元素的位置:");
fflush(stdin);
scanf("%d",&i);
Delete(Prtl,i);
Printout(Prtl);
break;
}
}while((cmd!='q')&&(cmd!='Q'));
return 0;
}
void Create(List Prtl)
{
List p;
ElementType t;
int i=1;
do{
printf("请输入第%d个数据(若输入0则表示结束输入)",i);
fflush(stdin);
scanf("%c",&t);
if(('A'<=t&&t>='Z')&&('a'<=t&&t<='z'))
{
++i;
p=(List)malloc(sizeof(struct LNode));
p->Data=t;
p->Next=Prtl->Next;
Prtl->Next=p;
}
}while(t!='0');
}
void Insert(List Prtl,ElementType x,int i)
{
int j=1;
List p=Prtl->Next;
while(p!=NULL&&j<i-1){
p=p->Next;
++j;
}
if(j==i-1&&p!=NULL){
List s=(List)malloc(sizeof(struct LNode));
s->Data=x;
s->Next=p->Next;
p->Next=s;
}
else{
printf("不合法!\n");
}
}
void Delete(List Prtl,int i)
{
int j=1;
List p=Prtl->Next;
while(p!=NULL&&j<i-1){
p=p->Next;
++j;
}
if(j==i-1&&p!=NULL&&p->Next!=NULL){
List s=p->Next;
p->Next=s->Next;
free(s);
}
else{
printf("不合法!\n");
}
}
void Printout(List Prtl)
{
List p=Prtl->Next;
int k=1;
while(p!=NULL){
printf("第%d位数据为;%c",k,p->Data);
++k;
p=p->Next;
putchar('\n');
}
putchar('\n');
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)