假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
2017-03-25 00:00
946 查看
假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递增 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和B表)的结点空间构造C表。
采用的方法:
尾插法
假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和B表)的结点空间构造C表。
采用的方法:
即先进行线性表的逆置,在进行合并
采用的方法:
尾插法
#include <iostream> #include <cstdlib> #include <cstdio> #include <ctime> using namespace std; typedef char ElemType; typedef struct Node{ ElemType data; struct Node *next; }Node, *LinkList; LinkList CreateList() { LinkList L; ElemType c; L = (LinkList)malloc(sizeof(Node)); L->next = NULL; Node *p , *tail; tail = L; c = getchar(); while(c != '#') { p = (Node *)malloc(sizeof(Node)); p->data = c; tail->next = p; tail = p; c = getchar(); } tail->next = NULL; return L; } void ShowList(LinkList L) { Node *p; p = L->next; while(p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } LinkList MergeList(LinkList LA, LinkList LB) { LinkList LC; Node *pa, *pb, *r; pa = LA->next; pb = LB->next; LC = LA; LC->next = NULL; r = LC; while(pa != NULL && pb != NULL) { if(pa->data <= pb->data) { r->next = pa; r = pa; pa = pa->next; } else { r->next = pb; r = pb; pb = pb->next; } if(pa) { r->next = pa; } else { r->next = pb; } } return LC; } int main() { LinkList LA; LA = CreateList(); getchar(); LinkList LB; LB = CreateList(); cout << "LA:" << endl; ShowList(LA); cout << "LB:" << endl; ShowList(LB); LinkList LC; LC = MergeList(LA, LB); cout << "MergeList:" << endl; ShowList(LC); return 0; }
假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和B表)的结点空间构造C表。
采用的方法:
即先进行线性表的逆置,在进行合并
#include <iostream> #include <cstdlib> #include <cstdio> #include <ctime> using namespace std; typedef char ElemType; typedef struct Node{ ElemType data; struct Node *next; }Node, *LinkList; LinkList CreateList() { LinkList L; ElemType c; L = (LinkList)malloc(sizeof(Node)); L->next = NULL; Node *p , *tail; tail = L; c = getchar(); while(c != '#') { p = (Node *)malloc(sizeof(Node)); p->data = c; tail->next = p; tail = p; c = getchar(); } tail->next = NULL; return L; } void ShowList(LinkList L) { Node *p; p = L->next; while(p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } void ReverseList(LinkList L) { Node *p, *q; p = L->next; L->next = NULL; while(p != NULL) { q = p->next; p->next = L->next; L->next = p; p = q; } } LinkList MergeList1(LinkList LA, LinkList LB) { LinkList LC; Node *pa, *pb, *r; pa = LA->next; pb = LB->next; LC = LA; LC->next = NULL; r = LC; while(pa != NULL && pb != NULL) { if(pa->data <= pb->data) { r->next = pa; r = pa; pa = pa->next; } else { r->next = pb; r = pb; pb = pb->next; } if(pa) { r->next = pa; } else { r->next = pb; } } return LC; } LinkList MergeList2(LinkList LA, LinkList LB) { ReverseList(LA); ReverseList(LB); LinkList LC; Node *pa, *pb, *r; pa = LA->next; pb = LB->next; LC = LA; LC->next = NULL; r = LC; while(pa != NULL && pb != NULL) { if(pa->data <= pb->data) { r->next = pb; r = pb; pb = pb->next; } else { r->next = pa; r = pa; pa = pa->next; } if(pa) { r->next = pa; } else { r->next = pb; } } return LC; } int main() { LinkList LA; LA = CreateList(); getchar(); LinkList LB; LB = CreateList(); cout << "LA:" << endl; ShowList(LA); cout << "LB:" << endl; ShowList(LB); LinkList LC; LC = MergeList2(LA, LB); cout << "MergeList2:" << endl; ShowList(LC); return 0; }
相关文章推荐
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么
- 数据结构链表习题2.27,假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表
- 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表C
- 已知线性表中元素以值递增有序排列,并以单链表作为存储结构,设计一个算法,删除表中值相同的多余元素
- 将两个递增的链表合并成一个递减的链表(相同的元素只留下一个),并要求利用原表结点
- 设A和B是两个单链表,其表中元素递增有序,使用一算法将A和B归并成一个案元素递减有序的单链表C(该程序中的功能包含了上几个博客中的部分功能)
- 已知两个链表 la和 lb,其元素值递增排序。编程将la和lb合并成一个递减有序(相同值元素只保留一个)的链表lc。(北方名校经典试题) 本题选做
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 单链表应用举例(单链表A和单链表B的元素都是非递减排列,利用单链表的基本运算,将它们合并成一个单链表C,要求C也是非递减序列)
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- 将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间
- 归并两个递增序列链表为一个递减有序链表
- 将非递减有序排列(L L1)归并为一个新的线性表L2 线性表L2中的元素仍按值非递减
- 假设利用两个线性表La和Lb分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的 集合A=AUB。这就要求对线性表作如下操作:扩大线性表La,将存在于线性表Lb中而不存在于线
- 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
- 将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间
- 编写算法,对非递减顺序存储的线性表操作,将表中相等的多余元素删除,变为严格递增
- 随机产生两组整数,每组整数中元素互不相同,这两组数按值递增有序。设计程序,将这两组数合并成按值递减有序的一组数,要求合并的新的一组数中,相同的元素只有一个。