怎样把两个有序的顺序表合并后还是有序的?
// 下面的程序代码用于集合的交、并运算,请仔细阅读.
#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;
typedef struct link {
\x09short num;
\x09struct link *next;
}AGG;
AGG *CreateList(int n) { // 创建结点数为n的链表,返回链表头
\x09AGG *head,*p,*q;
\x09head = p = new AGG;
\x09head->num = 0;
\x09for(short i = 0;i < n;i++) {
\x09\x09q = new AGG;
\x09\x09q->num = (unsigned)rand() % n + n/2;
\x09\x09p->next = q;
\x09\x09p = q;
\x09}
\x09p->next = head;
\x09return head;
}
void RiseSort(AGG *head) { // 上升排序
\x09AGG *p,*s,*pt;
\x09p = head;
\x09s = p->next;
\x09while(p->next != head) {
\x09\x09while(s->next != head) {
\x09\x09\x09if(p->next->num > s->next->num) {
\x09\x09\x09\x09pt = p->next;
\x09\x09\x09\x09p->next = s->next;
\x09\x09\x09\x09s->next = p->next->next;
\x09\x09\x09\x09p->next->next = pt;
\x09\x09\x09}
\x09\x09\x09else s = s->next;
\x09\x09}
\x09\x09p = p->next;
\x09\x09s = p->next;
\x09}
}
void Simplification(AGG *head) { // 去除相同的集合元素
\x09AGG *p,*q,*s;
\x09p = head->next;
\x09q = p->next;
\x09while(q != head) {
\x09\x09if(p->num == q->num) {
\x09\x09\x09p->next = q->next;
\x09\x09\x09s = q;
\x09\x09\x09q = q->next;
\x09\x09\x09delete s;
\x09\x09}
\x09\x09else {
\x09\x09\x09p = p->next;
\x09\x09\x09q = q->next;
\x09\x09}
\x09}
}
AGG *CreateAgg(int n) {
\x09AGG *head;
\x09head = CreateList(n);
\x09RiseSort(head);;
\x09Simplification(head);
\x09return head;
}
void InsertNode(AGG *head,short num) {
\x09AGG *t,*p = head;
\x09while(p->next != head) {
\x09\x09if(p->next->num == num) return;
\x09\x09if(p->next->num < num) p = p->next;
\x09\x09else {
\x09\x09\x09t = new AGG[1];
\x09\x09\x09t->num = num;
\x09\x09\x09t->next = p->next;
\x09\x09\x09p->next = t;
\x09\x09\x09return;
\x09\x09}
\x09}
\x09t = new AGG[1];
\x09t->num = num;
\x09p->next = t;
\x09t->next = head; // 插入在链表尾的处理
}
AGG *MergeAgg(AGG *A,AGG *B) { // A∪B
\x09AGG *head,*pa,*pb,*pc,*qc;
\x09head = pc = new AGG;
\x09pa = A->next;
\x09while(pa != A) {
\x09\x09qc = new AGG[1];
\x09\x09qc->num = pa->num;
\x09\x09pc->next = qc;
\x09\x09pc = qc;
\x09\x09pa = pa->next;
\x09}
\x09pc->next = head;
\x09pb = B->next;
\x09while(pb != B) {
\x09\x09InsertNode(head,pb->num);
\x09\x09pb = pb->next;
\x09}
\x09return head;
}
AGG *MutualAgg(AGG *A,AGG *B) { // A∩B
\x09AGG *C,*pa,*pb,*pc,*qc;
\x09C = pc = new AGG;
\x09pc->num = 0;
\x09pa = A->next;
\x09pb = B;
\x09while(pa != A) {
\x09\x09pb = B->next;
\x09\x09while(pb != B) {
\x09\x09\x09if(pb->num == pa->num) {
\x09\x09\x09\x09qc = new AGG;
\x09\x09\x09\x09qc->num = pb->num;
\x09\x09\x09\x09pc->next = qc;
\x09\x09\x09\x09pc = qc;
\x09\x09\x09}
\x09\x09\x09pb = pb->next;
\x09\x09}
\x09\x09pa = pa->next;
\x09}
\x09pc->next = C;
\x09return C;
}
void PrintList(AGG *head) {
\x09AGG *p = head->next;
\x09short counter = 0;
\x09while(p != head) {
\x09\x09if(counter%10 == 0) cout << endl;
\x09\x09cout<<setw(5)<< p->num;
\x09\x09counter++;
\x09\x09p = p->next;
\x09}
\x09cout << endl;
}
void freeheap(AGG *head) {
\x09AGG *p,*q;
\x09p = head;
\x09q = p->next;
\x09while(q != head) {
\x09\x09p = q;
\x09\x09q = p->next;
\x09\x09delete p;
\x09}
\x09free(head);
}
int main() {
\x09AGG *A,*B,*C,*D;
\x09srand(time(NULL));
\x09A = CreateAgg(50);
\x09cout << "集合A的元素有:";
\x09PrintList(A);
\x09B = CreateAgg(50);
\x09cout << endl << endl << "集合B的元素有:";
\x09PrintList(B);
\x09C = MutualAgg(A,B);
\x09cout << endl << endl << "C = A∩B:" << endl;
\x09PrintList(C);
\x09cout << endl << endl << "D = A∪B : " << endl;
\x09D = MergeAgg(A,B);
\x09PrintList(D);
\x09freeheap(A);
\x09freeheap(B);
\x09freeheap(C);
\x09freeheap(D);
\x09printf("\n\n");
\x09return 0;
}
向HCL,NA2SO4混合溶液中加入BA(OH)2溶液,沉淀是一开始就产生还是怎样?沉淀是一开始就 2020-05-16 …
用32P标记的T2噬菌体不是利用大肠杆菌的DNA复制怎么子代还有32P的DNA,大量含有还是少量含 2020-05-17 …
孔子认为水有德行,有孔子认为水有德行,有(),有(),还()……(以下是全部题目).孔子认为水有德 2020-06-05 …
我做地理光照图等太阳高度线题一点思路也没有还是不舍得放弃浪费了很多时间呢也做不出怎么办啊我做地理光 2020-06-10 …
……尽管……造句用……尽管……造句给几个吧就1个尽管,没有还是.不能有还或还是.一个逗号一个句号. 2020-06-13 …
inparticular用于否定句是刻意没有还是没有刻意?是刻意不还是不刻意呢.Hesaidton 2020-06-15 …
材料一人无论富有还是贫穷,年长还是年幼,尊贵还是平凡,都需要朋友。人在孩提时就会寻找同龄的伙伴。材 2020-06-17 …
无论年长还是年幼、聪慧还是愚钝、富有还是贫穷,也无论是自由人还是在押犯,任何人都有人格和尊严..( 2020-06-22 …
任何人,无论其年长还年幼、聪明还是愚钝、富有还是贫穷,也无论其是高官还是平民、是自由人还是在押犯。 2020-06-22 …
stillchinese是什么意思?"still"有"还是"的意思,能翻成"还是中国人吗"? 2020-07-17 …