1.2链式结构 实现 C = A U B
2016-05-17 13:02
281 查看
// 链式结构 实现 C = AUB #include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Node { int data; struct Node *next; }*LinkList; bool InitList(LinkList *L); //创建空链表 bool ListInsert(LinkList L,int pos,int e); //在链表的第pos个位置插入e bool ListTraverse(LinkList L); //遍历输出链表中各元素 bool GetElem(LinkList L,int pos,int *e);//把第pos个位置的元素赋给e int ListLength(LinkList L); //求链表的长度 void MergeList(LinkList La,LinkList Lb,LinkList *Lc); int main() { LinkList La, Lb, Lc; int i, a[4] = {3,5,8,11}, b[7] = {2,6,8,9,11,15,20}; InitList(&La); for(i = 1; i <= 4; i++) ListInsert(La,i,a[i-1]); printf("La = "); ListTraverse(La); InitList(&Lb); for(i = 1; i <= 7; i++) ListInsert(Lb,i,b[i-1]); printf("Lb = "); ListTraverse(Lb); MergeList(La,Lb,&Lc); printf("Lc = "); ListTraverse(Lc); return 0; } bool InitList(LinkList *L) //创建空链表 { (*L) = (LinkList)malloc(sizeof(Node)); if(*L == NULL) { printf("内存分配失败 程序终止!|n"); exit(-1); } (*L)->next = NULL; return true; } bool ListInsert(LinkList L,int pos,int e) //在链表的第pos个位置插入e { int j = 0; LinkList p, s; p = L; while(p != NULL && j < pos - 1) //寻找第pos - 1 个结点 { p = p->next; j++; } if(p == NULL || j > pos - 1) return false; s = (LinkList)malloc(sizeof(Node)); s->data = e; s->next = p->next; p->next = s; return true; } bool ListTraverse(LinkList L)//遍历输出链表中各元素 { LinkList p; p = L->next; while(p != NULL) { printf("%d ",p->data); p = p->next; } printf("\n"); return true; } void MergeList(LinkList La,LinkList Lb,LinkList *Lc) { //已知线性表La和Lb中的数据元素按值 非递减排列 //归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列 int i = 1, j = 1, k = 0; int La_len, Lb_len; int ai, bj; InitList(Lc); //创建空表Lc La_len = ListLength(La); Lb_len = ListLength(Lb); while(i <= La_len && j <= Lb_len) { GetElem(La,i,&ai); GetElem(Lb,j,&bj); if(ai <= bj) { ListInsert(*Lc,++k,ai); i++; } else { ListInsert(*Lc,++k,bj); j++; } } while(i <= La_len) //表La为非空 Lb为空 { GetElem(La,i++,&ai); ListInsert(*Lc,++k,ai); } while(j <= Lb_len) { GetElem(Lb,j++,&bj); ListInsert(*Lc,++k,bj); } } int ListLength(LinkList L) //求链表的长度 { int i= 0; LinkList p = L->next; while(p != NULL) { i++; p = p->next; } return i; } bool GetElem(LinkList L,int pos,int *e)//把第pos个位置的元素赋给e { int j = 1; //j为计数器 LinkList p = L->next; // p指向第一个结点 while(p != NULL && j < pos) //顺指针向后查找 直到p指向第i个元素 或 p为空 { p = p->next; j++; } if(p == NULL || j > pos) return false; *e = p->data; //取第pos个元素 return true; }
程序执行结果:
相关文章推荐
- Unity 脚本 自动添加 脚本信息
- 150. Evaluate Reverse Polish Notation【M】【19】
- vs 打开项目,发现项目中通过nuget引用的dll都不可用的解决方法
- 栈的应用
- mysql中or和in的效率问题
- 视频直播 解决方案
- eclipse运行maven install报错
- 第十二周实践项目课后————3
- 玩转Google新开源项目:FlexboxLayout
- 对ToString("X2 ")的理解 (转)
- Android测试有用工具笔记
- Qt 网易云api 在线播放音乐
- UIBezierPath精讲(二)
- IT十八掌掌第九天课程总结
- node express 快速入门
- struts2处理.do后缀de请求
- 【数据结构】链表 YTU 2201 逆置线性表(线性表)
- 第10、11周项目2 - 存储班长信息的学生类(1)
- Android盒子开发,获取网络的信息(热点,WIFI,有线)
- 如何上谷歌