实验报告:链表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告(实验二)
专业班级姓名学号课程名称
学年学期第二学期课程类别专业必修
●实验内容:实验时间:2012年3 月27日
1. 编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序)。
2. 编写函数,实现遍历单链表。
3. 编写函数,实现把单向链表中元素逆置(不允许申请新的结点空间)。
4. 编写函数,建立一个非递减有序单链表。
5. 编写函数,利用以上算法,建立两个非递减有序单链表,然后合并成一个非递减链表。
6. 编写函数,在非递减有序单链表中插入一个元素使链表仍然有序。
7. 编写函数,实现在非递减有序链表中删除值为x的结点。
8. 编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
●实验目的及要求:
1. 掌握单链表的存储结构形式及其描述
2. 掌握单链表的建立、查找、插入和删除操作
●方法与步骤:
详见源代码。
●小结:
经过这次的实验:
⒈使我链表方面的知识更加熟练。包括:链表中元素的逆置;非递减有序单链表的建立;建立两个非递减有序单链表,然后合并成一个非递减链表;还有在非递减有序链表中删除值为x的结点。
⒉让我了解我链表的知识还是不牢固;但有做顺序表的基础还可以做。但对两个非递减链表合并的方法并不会,后来经过自己看书和问同学才能完成。以后我会更加努力学习数据结构。
分数:批阅老师:2012年月日
实验结果:
#include
#include
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->data
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");