4、 实验方法
第一步:定义单链表的存储结构。
第二步:编写单链表操作的具体函数定义。
第三步:使用定义的单链表并调用单链表的一些操作,实现具体运算。
具体函数的定义有:
1) insert(L,i,x)在单链表的第i个元素之前插入一个新元素x.
2) deletet(L,i) 删除单链表的第i个元素。
3) listprint(L) 输出单链表。
注意:每完成一个步骤,必须及时输出链表元素,以便于观察操作结果。
#include "stdio.h"
#include "malloc.h" /*包含动态分配内存函数*/
#define NULL 0
#define TRUE 1
#define FALSE 0
typedef int elemtype;
typedef struct node /*链表结点类型定义*/
{elemtype data; /*结点数据域*/
struct node *next; /*结点的指针域*/
}linklist;
linklist *creatlist() /*创建链表函数—以按下任意建开始创建,以输入字符‘?’{char ch; 表示结束标志*/
int x;
linklist *head,*r,*p;
p=(linklist*)malloc(sizeof(linklist));
head=p;
p->next=NULL;
r=p;
ch=getchar();
while(ch!='?')
{scanf("%d",&x);
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
ch=getchar();
}
return (head);
}
int locate(head,k) /*定位检索函数—如链表中存在值为k的结点,则返回真,否
linklist *head; 则返回假*/
elemtype k;
{linklist *s;
s=head->next;
while(s!=NULL)
if(s->data!=k)
s=s->next;
else
return TRUE;
return FALSE;
}
请调试好上述程序
由于问题太长,下面的是接着上面的
void main() /*主函数*/
{linklist *head; /*定义指向链表的指针head*/
int x;
int i,j;
printf("please input the initial node and start by any key('?'execpt)end with '?'\n");
head=creatlist();
printf("we have created a linklist as follow:\n");
print(head);
printf("now start search,please input the search value:");
scanf("%d",&x);
printf("\n");
if(locate(head,x)) printf("exsist!\n");
else
printf("not exsist!\n");
printf("start insert operation,please input insert position:");
scanf("%d",&i);
insert(head,i,x);
printf("after insertion:\n");
print(head);
printf("now start delete operation,input the delete position please:");
scanf("%d",&j);
delete(head,j);
printf("after deletion:\n");
print(head);
}