实验报告:链表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告(实验二)

专业班级姓名学号课程名称

学年学期第二学期课程类别专业必修

●实验内容:实验时间:2012年3 月27日

1. 编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序)。

2. 编写函数,实现遍历单链表。

3. 编写函数,实现把单向链表中元素逆置(不允许申请新的结点空间)。

4. 编写函数,建立一个非递减有序单链表。

5. 编写函数,利用以上算法,建立两个非递减有序单链表,然后合并成一个非递减链表。

6. 编写函数,在非递减有序单链表中插入一个元素使链表仍然有序。

7. 编写函数,实现在非递减有序链表中删除值为x的结点。

8. 编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。

●实验目的及要求:

1. 掌握单链表的存储结构形式及其描述

2. 掌握单链表的建立、查找、插入和删除操作

●方法与步骤:

详见源代码。

●小结:

经过这次的实验:

⒈使我链表方面的知识更加熟练。包括:链表中元素的逆置;非递减有序单链表的建立;建立两个非递减有序单链表,然后合并成一个非递减链表;还有在非递减有序链表中删除值为x的结点。

⒉让我了解我链表的知识还是不牢固;但有做顺序表的基础还可以做。但对两个非递减链表合并的方法并不会,后来经过自己看书和问同学才能完成。以后我会更加努力学习数据结构。

分数:批阅老师:2012年月日

实验结果:

#include

#include typedef int ElemType;

typedef struct LNode

{ElemType data;

struct LNode *next;

}LNode,*Linklist;

void Createlist(Linklist &L) //建立一个带头结点的单链表(无序),当x=0时结束{Linklist p,s;

ElemType x;

L=(Linklist)malloc(sizeof(LNode));

L->next=NULL;

p=L;

scanf("%d",&x);

while(x){

s=(Linklist)malloc(sizeof(LNode));

s->data=x;

s->next=NULL;

p->next=s;

p=s;

scanf("%d",&x);}

}

void printlist(Linklist &L) //以输出的形式实现遍历单链表

{Linklist p;

p=L;

while(p->next!=NULL){

p=p->next;

printf("%d ",p->data);}

printf("\n");

}

void nizhi(Linklist &L) //逆置

{Linklist p,s;

p=L->next;

L->next=NULL;

while(p){

s=p;

p=p->next;

s->next=L->next;

L->next=s;}

}

void Insert(Linklist &L,ElemType x) //在非递减有序单链表中插入一个元素使链表仍然有序

{Linklist p,s;

s=(Linklist)malloc(sizeof(LNode));

s->data=x;

p=L;

while(p->next&&p->next->data<=x)

p=p->next;

s->next=p->next;

p->next=s;

}

void Creat_Sort(Linklist &L) //建立一个非递减有序单链表

{ElemType x;

L=(Linklist)malloc(sizeof(LNode));

L->next=NULL;

printf("建立有序表,输入任意个整形数据以0结束:\n");

scanf("%d",&x);

while(x){

Insert(L,x);

scanf("%d",&x);}

}

void merger(Linklist La,Linklist Lb,Linklist &Lc) //建立两个非递减有序单链表,然后合并成一个非递减链表

{Linklist p,q,s,rear;

p=La->next;

q=Lb->next;

Lc=rear=La;

free(Lb);

while(p&&q){

if(p->datadata) {s=p;p=p->next;}

else {s=q;q=q->next;}

rear->next=s;

rear=rear->next;}

if(p) rear->next=p;else rear->next=q;

}

void Delete(Linklist &L,ElemType x) //在非递减有序链表中删除值为x的结点{Linklist p,q;

p=L;

q=L->next;

while(q&&q->data!=x){

p=q;

q=q->next;}

if(!q) printf("\nnot deleted");

else {p->next=q->next;free(q);}

}

void main()

{Linklist La,Lb,Lc;

ElemType x;

int n;

printf("1.随机盘输入一组元素,建立无序的单链表,以0结束\n");

相关文档
最新文档