西安理工大学《数据结构》链表合并
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
课程设计报告设计题目:链表合并
学院经济与管理学院
专业信息管理与信息系统
班级信管131
学号
姓名
2015秋季学期
报告格式按以下标题及内容书写,标题为小四号宋体,正文内容为五号字,16开打印。
一、问题描述
实现两个链表的合并
二、基本要求
1) 建立两个链表A和B,链表元素个数分别为m和n个;
2) 假设元素分别为(x1,x2,…xm),和(y1,y2, …yn);
3)把它们合并成一个顺序表C,使得:当m>=n时,C=x1,y1,x2,y2,...xn,yn, (x)
当n>m时,C=y1,x1,y2,x2,…ym,xm,…,yn
4)输出顺序表C
5) 用直接插入排序法对顺序表C进行升序排序,生成链表D,并输出链表D。
6)能删除链表D中指定位置和指定值的元素。
三、算法思想
首先我们需要建立两个链表A,B,A链表的元素个数为m;B链表的元素个数为n;在将A,B链表进行合并,根据m和n的大小关系决定链表C的元素顺序(当m>=n 时,应该先插入A表中的数据元素,在偶数位插入A表中的数据元素,在奇数位插入B表中的数据元素,最后在插入A表中剩余的数据元素;当m 四、数据结构 数据结构定义如下: struct Node { long int number; struct Node *next; }; 五、模块划分 (1) 结构体struct Node的创建。 (2) struct Node *create()链表的创建。 (3) void print(struct Node *head)功能是对链表进行输出。 (4) struct Node * inter_link(struct Node * chain1, int a, struct Node * chain2, in t b) 算法的功能是实现两个链表的交叉合并,并且可以根据两链表的长短将行不通的插入。 (5) void InsertSort(struct Node *p,int m)算法的功能是对一合并好的链表进行升序插入排序。 (6) main()函数主要是对算法进行测试。 六、源程序 #include #include #include #include #define L sizeof(struct Node) struct Node //结构体 { long int number; struct Node *next; }; struct Node *create(int a)//链表创建函数 { int n; struct Node *p1, *p2, *head; head = NULL; n = 0; p2 = p1 = (struct Node *) malloc(L); //分配内存 scanf("%ld", &p1->number); while (a)//录入链表信息 { n = n + 1; if (n == 1) head = p1; else p2->next = p1; p2 = p1; p1 = (struct Node *) malloc(L); if (a != 1)//分配内存 scanf("%ld", &p1->number); a--; //控制输入的个数 } p2->next = NULL; return (head); }//链表创建函数结束 void print(struct Node *head)//输出函数 { struct Node *p; p = head; printf("数字:\n"); if (head != NULL) do//循环实现输出 { printf("%ld", p->number); printf(" "); p = p->next; } while (p != NULL); printf("\n"); } //链表的交叉合并算法 struct Node * inter_link(struct Node * chain1, int a, struct Node * chain2, int b) { int temp; struct Node *head, *p1, *p2, *pos; /*判断a,b大小并合并*/ if (a >= b) { head = p1 = chain1; p2 = chain2; } else/*b>a*/ { head = p1 = chain2; p2 = chain1; temp = a, a = b, b = temp; /*交换a和b*/