计算机数据结构线性表的有关操作实验报告
实验报告 实验名称 线性表的有关操作 实验教室 实验日期 2018年4月2日 学 号 姓 名 专业班级 计算机6班 指导教师 信息与计算机科学技术实验中心 一、实验目的 1、掌握单向链表的存储特点及其实现。 2、理解和掌握单链表的类型定义方法和结点生成方法。 3、掌握单向链表的插入、删除算法及其应用算法的程序实现。 二、实验环境 CodeBlocks 三、实验内容及结果 ①1 — —6的算法+主函数。 (1、随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2、遍历单向链表(显示)。 3、把单向链表中元素逆置(不允许申请新的结点空间)。 4、在单向链表中删除所有的偶数元素(值为偶数)结点。 5、编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用 该函数建立一个非递减有序单向链表。 6、利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表。 ) ^include #include #include using namespace std; typedef int ElemType; typedef struct node( ElemType data; struct node *next; }LNode, *LinkList; void CreateList(LinkList int i; L=(LinkList)malloc(sizeof(LNode)); L一>next=NULL; for (i=n;i>=l;i--) { p=(LinkList)malloc(sizeof(LNode)); scanf(〃%d〃, p->next=L~>next; L->next=p; } } void print (LinkList L) { LinkList p=L->next; while (p) printf (,z%d z,, p->data); p=p->next; printf (〃\n〃); } void reverse(LinkList p=L->next;L->next=NULL; while(p!=NULL) { q=p->next; p->next=L~>next; L->next=p; p=q; } } void Listdelete(LinkList p=L;q=p->next; while(q) { if ((q->data)%2!=0) ( q=q->next; p=p->next; } else ( p->next=q->next; q=q->next; } } print (L); } void sort (LinkList ElemType a; for (p=L->next;p!=NULL;p=p->next) { s=p; for (q=p->next;q!二NULL;q=q->next)if((q->data)data)) s=q; } a=s->data; s->data=p->data; p->data=a; } void insert (LinkList p=L;q=p->next; sort(L); while(q) { if (q->data>=e) break; p=p->next; q=q->next; } s=(LinkList)malloc(sizeof(LNode)); s~>data=e; s~>next=q; p->next=s; print (L); } void hebing(LinkList la, LinkList lb) LinkList pa, pb, pc, 1c; sort(la); sort (lb); lc= (LNode*)malloc (sizeof (LNode)); 〃申请结点 //初始化链表lc //pa是链表la的工作指针 //pb是链表lb的工作指针 //pc是链表lc的工作指针 //la和lb均非空 1c一〉next=NULL; pa=la~>next; pb=lb~>next; pc=lc; while(pa pc=pa; pa=pa->next; //la中元素插入lc else ( pc~>next=pb; pc=pb; pb=pb->next;} }//lb中元素插入lc if(pa) pc-〉next二pa; 〃若pa未到尾,将pc指向pa else pc~>next=pb; 〃若pb未到尾,将pc指向pb free(la); free (lb); printf (z/合并成一个非递减链表\n〃); print (lc); } int main() { LinkList L, la, lb; int n, nl, n2, m; printf (zz创建单向链表,输入元素个数:\n〃); scanf(〃%d〃, printf (z/输入链表元素:\n〃); CreateList(L, n); printf (z/遍历单向链表:\n〃); print (L); printf (zz逆置单向链表:\n〃); reverse(L);print (L); printf (z,删除所有的偶数元素:\n〃); Listdelete (L); printf (〃请输入插入的新元素\n〃); scanf(〃%d〃, printf (〃将链表排序后插入新元素使链表元素仍有序\n〃); insert(L, m); printf (〃\n〃); printf (〃创建两个新链表\n〃); printf (〃输入la的元素个数:\n〃); scanf(〃%d〃, printf (〃输入链表la的元素:\n〃); CreateList(la, nl); printf (〃输入Lb元素个数:\n〃); scanf(〃%d〃, printf (〃输入链表lb元素:\n〃); CreateList(lb, n2); hebing(la, lb); return 0;} ②算法7+主函数 (7.利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。) #include #include<