专业 学号 姓名 吴兴平 教师评定_________________
实验题目 单链表操作
一、 实验内容
1)建立带表头结点的单链表;
(2)输出单链表中所有结点的数据域值;
(3)输入x,y 在第一个数据域值为x 的结点之后插入结点y ,若无结点x ,则在表尾插入结点y;
(4)输入k ,删除单链表中所有的结点k ,并输出被删除结点的个数。
二、实验代码
#define NULL 0
typedef struct node{int data;
struct node *link;}LNode; /*结点结构定义*/
LNode *createfirst()
{
LNode *s,*h;/*前插法建立带表头结点的单链表*/
int x,tag;
printf("input end flag:");
scanf("%d",&tag);
h=NULL;
printf("input number x:");
scanf("%d",&x);
while(x!=tag)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->link=h;
h=s;
scanf("%d",&x);
}
return h;
}
void printlist(LNode *h) /*显示输出以h 为头指针的单链表各结点数据域值*/
{ LNode *p;
p=h;
while(p!=NULL)
{ printf("%d ",p->data);
p=p->link;
}
printf("\n");
}
void insertlist(LNode *h,int x,int y)
{
LNode *p,*q,*s;/*输入x,y 在第一个数据域值为x 的结点之后插入结点y ,若无结点x ,则在表尾插入结点y;*/
s=(LNode*)malloc(sizeof(LNode));
s->data=y;
p=h->link;
q=h;
while(q->data!=x&&p->link!=NULL)
{
q=p;p=p->link;}
if(q->data==x)
{
q->link=s;s->link=p;
}
else
{p->link=s;s->link=NULL;}
}
void deletelist(LNode *h,int k)
{
LNode *s;/*输入k ,删除单链表中所有的结点k ,并输出未被删除的结点。*/
while(h->link)
{
if(h->link->data==k)
{
s=h->link;
h->link=s->link;
free(s);
}
else h=h->link;
}
}
main()
{ LNode *h;
int x,y,k;
h=createfirst(); printlist(h);
printf("insert:x,y");
scanf("%d,%d",&x,&y); insertlist(h,x,y); printlist(h);
printf("delete number:"); scanf("%d",&k); deletelist(h,k); printlist(h);
getch();
}
三、运行过程
1.输入数据
2.插入数据
3.删除数据
四、实验心得
通过这个实验,对单链表知识有更深的认识了,也看到自己在C 语言上的不足。
专业 学号 姓名 吴兴平 教师评定_________________
实验题目 单链表操作
一、 实验内容
1)建立带表头结点的单链表;
(2)输出单链表中所有结点的数据域值;
(3)输入x,y 在第一个数据域值为x 的结点之后插入结点y ,若无结点x ,则在表尾插入结点y;
(4)输入k ,删除单链表中所有的结点k ,并输出被删除结点的个数。
二、实验代码
#define NULL 0
typedef struct node{int data;
struct node *link;}LNode; /*结点结构定义*/
LNode *createfirst()
{
LNode *s,*h;/*前插法建立带表头结点的单链表*/
int x,tag;
printf("input end flag:");
scanf("%d",&tag);
h=NULL;
printf("input number x:");
scanf("%d",&x);
while(x!=tag)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->link=h;
h=s;
scanf("%d",&x);
}
return h;
}
void printlist(LNode *h) /*显示输出以h 为头指针的单链表各结点数据域值*/
{ LNode *p;
p=h;
while(p!=NULL)
{ printf("%d ",p->data);
p=p->link;
}
printf("\n");
}
void insertlist(LNode *h,int x,int y)
{
LNode *p,*q,*s;/*输入x,y 在第一个数据域值为x 的结点之后插入结点y ,若无结点x ,则在表尾插入结点y;*/
s=(LNode*)malloc(sizeof(LNode));
s->data=y;
p=h->link;
q=h;
while(q->data!=x&&p->link!=NULL)
{
q=p;p=p->link;}
if(q->data==x)
{
q->link=s;s->link=p;
}
else
{p->link=s;s->link=NULL;}
}
void deletelist(LNode *h,int k)
{
LNode *s;/*输入k ,删除单链表中所有的结点k ,并输出未被删除的结点。*/
while(h->link)
{
if(h->link->data==k)
{
s=h->link;
h->link=s->link;
free(s);
}
else h=h->link;
}
}
main()
{ LNode *h;
int x,y,k;
h=createfirst(); printlist(h);
printf("insert:x,y");
scanf("%d,%d",&x,&y); insertlist(h,x,y); printlist(h);
printf("delete number:"); scanf("%d",&k); deletelist(h,k); printlist(h);
getch();
}
三、运行过程
1.输入数据
2.插入数据
3.删除数据
四、实验心得
通过这个实验,对单链表知识有更深的认识了,也看到自己在C 语言上的不足。