【C语言版数据结构】线性表的链式表示,并且实现合并两个非递减有序排列到新的线性表
2013-10-20 16:31
645 查看
/*已知线性表LA和LB中的数据元素按值的非递减有序排列, 现要将LA和LB归并成一个新的线性表LC,且LC中的数据元素仍按值的非递减有序排列*/ //----------------头文件------------------------ #include<stdio.h> #include<stdlib.h> //----------------宏定义------------------------ #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 //-------------线性表的元素节点----------------- typedef int ElemType; typedef int Bool; typedef struct Node { ElemType data; struct Node *next; }List, *NList; //-------------函数列表------------------------- Bool InitList(NList L);//构造一个空线性表L,创建成功返回OK Bool InputData(NList L);//初始化线性表,成功返回OK int ListLength(List L);//求线性表的长度 Bool GetElem(List L,int i,ElemType &e);//用e返回L中第i个数据,成功后返回OK Bool ListInsert(NList L,ElemType e);//在线性表L的链尾插入元素e,成功返回OK void MergeList(List La,List Lb,NList Lc);//合并La和Lb到Lc中 void OutPut(NList L);//输出线性表所有元素 //----------------主函数------------------------ int main() { List La,Lb,Lc; InitList(&La);InitList(&Lb);InitList(&Lc); printf("请输入链La的元素个数:"); InputData(&La); printf("请输入链Lb的元素个数:"); InputData(&Lb); MergeList(La,Lb,&Lc); OutPut(&Lc); return 0; } //----------------子函数的实现------------------- Bool InitList(NList L)//构造一个空线性表L,创建成功返回OK { L->next = NULL; L->data = 0; return OK; } Bool InputData(NList L)//初始化线性表,成功返回OK { int n; NList Temp_L,p; scanf("%d",&n); L->data = n; p = L; while(n--) { if(!(Temp_L = (NList)malloc(sizeof(List)))) { exit(OVERFLOW); } scanf("%d",&Temp_L->data); Temp_L->next = NULL; p->next = Temp_L; p = Temp_L; } return OK; } int ListLength(List L)//求线性表的长度 { return L.data; } Bool GetElem(List L,int i,ElemType &e)//用e返回L中第i个数据,成功后返回OK { NList p = &L; if(i<0 || i > p->data) { return ERROR; } while(i) { p = p ->next; i--; } e = p->data; return OK; } Bool ListInsert(NList L,ElemType e)//在线性表L的链尾插入元素e,成功返回OK { int L_len = L->data; NList newNode,p = L; if(!(newNode = (NList)malloc(sizeof(List)))) { exit(OVERFLOW); } newNode->next = NULL; newNode->data = e; while(L_len) { p = p->next; L_len--; } p->next = newNode; L->data++; return OK; } void MergeList(List La,List Lb,NList Lc) //合并La和Lb到Lc中 { int i = 1, k = 0,j = 1; int La_len = ListLength(La); int Lb_len = ListLength(Lb); ElemType ai,bj; while((i<=La_len)&&(j<=Lb_len)) { GetElem(La,i,ai);GetElem(Lb,j,bj); if(ai <= bj) { ListInsert(Lc,ai); ++i; } else { ListInsert(Lc,bj); ++j; } } while(i<= La_len) { GetElem(La,i++,ai); ListInsert(Lc,ai); } while(j<= Lb_len) { GetElem(Lb,j++,bj); ListInsert(Lc,bj); } } void OutPut(NList L) //输出线性表所有元素 { NList Temp_L = L->next; while(Temp_L) { printf("%d ",Temp_L->data); Temp_L = Temp_L->next; } }
相关文章推荐
- 算法与数据结构--实现线性表的合并操作(合并后按非递减排列)--算法2.6
- 算法与数据结构--实现线性表的合并操作(合并后按非递减排列)
- 两个有序线性表的合并(线性表使用 Vector表示)
- 数据结构链表习题2.27,假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表
- 合并两个有序线性表的元素(C语言版)
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 利用线性链表基本操作完成两个有序线性表的合并
- 02-线性结构1 两个有序链表序列的合并——中国大学MOOC-陈越、何钦铭-数据结构-2017秋
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表C
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么
- PAT数据结构_02-线性结构1 两个有序链表序列的合并 (15分)
- 数据结构------线性表的链式表示与实现
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 《数据结构》线性表的链式表示和实现(三)
- 合并两个有序线性表的元素(C语言版)
- php实现两表合并成新表并且有序排列的方法
- 数据结构(4)——线性表的链式表示和实现
- 数据结构 链表 合并两个有序的单链表 C语言版
- 数据结构 02-线性结构1 两个有序链表序列的合并