爱问知识人 爱问教育 医院库

关于C语言(数据结构版)的问题

首页

关于C语言(数据结构版)的问题

要编写一个程序,它要实现把两个非递减集合A和B合并生成具有同样属性的集合C。要求把数据的定义,每个函数的具体实现以及主函数写出。
本人在数据结构方面属于菜鸟,请各位高手指点。

提交回答
好评回答
  • 2011-11-10 00:46:57
      #include 
    #include 
    #include 
    using namespace std;
    typedef struct link {
    	short num;
    	struct link *next;
    }AGG;
    AGG *CreateList(int n) { // 创建结点数为n的链表,返回链表头
    	AGG *head,*p,*q;
    	head = p = new AGG;
    	head->num = 0;
    	for(short i = 0;i num = (unsigned)rand() % n + n/2;
    		p->next = q;
    		p = q;
    	}
    	p->next = head;
    	return head;
    }
    void RiseSort(AGG *head) { // 上升排序
    	AGG *p,*s,*pt; 
    	p = head;
    	s = p->next;
    	while(p->next != head) {
    		while(s->next != head) {
    			if(p->next->num > s->next->num) {
    				pt = p->next;
    				p->next = s->next;
    				s->next = p->next->next;
    				p->next->next = pt;
    			}
    			else s = s->next;
    		}
    		p = p->next;
    		s = p->next;
    	}
    }
    void Simplification(AGG *head) { // 去除相同的集合元素
    	AGG *p,*q,*s;
    	p = head->next;
    	q = p->next;
    	while(q != head) {
    		if(p->num == q->num) {
    			p->next = q->next;
    			s = q;
    			q = q->next;
    			delete s;
    		}
    		else {
    			p = p->next;
    			q = q->next;
    		}
    	}
    }
    AGG *CreateAgg(int n) {
    	AGG *head;
    	head = CreateList(n);
    	RiseSort(head);;
    	Simplification(head);
    	return head;
    }
    void InsertNode(AGG *head,short num) {
    	AGG *t,*p = head;
    	while(p->next != head) {
    		if(p->next->num == num) return; 
    		if(p->next->num next;
    		else {
    			t = new AGG[1];
    			t->num = num;
    			t->next = p->next;
    			p->next = t;
    			return;
    		}
    	}
    	t = new AGG[1];
    	t->num = num;
    	p->next = t; 
    	t->next = head;     // 插入在链表尾的处理
    }
    AGG *MergeAgg(AGG *A,AGG *B) {  // A∪B
    	AGG *head,*pa,*pb,*pc,*qc;
    	head = pc = new AGG;
    	pa = A->next;
    	while(pa != A) {
    		qc = new AGG[1];
    		qc->num = pa->num;
    		pc->next = qc;
    		pc = qc;
    		pa = pa->next;
    	}
    	pc->next = head;
    	pb = B->next;
    	while(pb != B) {
    		InsertNode(head,pb->num);
    		pb = pb->next;
    	}
    	return head;
    }
    AGG *MutualAgg(AGG *A,AGG *B) {  // A∩B
    	AGG *C,*pa,*pb,*pc,*qc;
    	C = pc = new AGG;
    	pc->num = 0;
    	pa = A->next;
    	pb = B;
    	while(pa != A) {
    		pb = B->next;
    		while(pb != B) {
    			if(pb->num == pa->num) {
    				qc = new AGG;
    				qc->num = pb->num;
    				pc->next = qc;
    				pc = qc;
    			}
    			pb = pb->next;
    		}
    		pa = pa->next;
    	}
    	pc->next = C;
    	return C;
    }
    void PrintList(AGG *head) {
    	AGG *p = head->next;
    	short counter = 0;
    	while(p != head) {
    		if(counter%10 == 0) cout num;
    		counter++;
    		p = p->next;
    	}
    	cout next;
    	while(q != head) {
    		p = q;
    		q = p->next;
    		delete p;
    	}
    	free(head);
    }
    int main() {
    	AGG *A,*B,*C,*D;
    	srand(time(NULL));
    	A = CreateAgg(50);
    	cout << "集合A的元素有:";
    	PrintList(A);
    	B = CreateAgg(50);
    	cout << endl << endl << "集合B的元素有:";
    	PrintList(B);
    	C = MutualAgg(A,B);
    	cout << endl << endl << "C = A∩B:" << endl;
    	PrintList(C);
    	cout << endl << endl << "D = A∪B : " << endl;
    	D = MergeAgg(A,B);
    	PrintList(D);
    	freeheap(A);
    	freeheap(B);
    	freeheap(C);
    	freeheap(D);
    	printf("\n\n");
    	return 0;
    }
    。
      

    1***

    2011-11-10 00:46:57

其他答案

    2011-11-10 11:00:12
  • 一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。   在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。   选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。

    y***

    2011-11-10 11:00:12

  • 2011-11-09 20:54:07
  •   2。1以下叙述中正确的是
    A)C语言比其他语言高级
    B)C语言可以不用编译就能被计算机识别执行
    C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
    D)C语言出现的最晚,具有其他语言的一切优点
        正确答案: C
     
    2。
      2 以下叙述中正确的是 A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其他函数之前 D)所有被调用的函数一定要在调用之前进行定义 正确答案: A 2。3 以下说法正确的是 A)C语言程序总是从第一个的函数开始执行 B)在C语言程序中,要调用函数必须在main()函数中定义 C)C语言程序总是从main()函数开始执行 D)C语言程序中的main()函数必须放在程序的开始部分 正确答案: C 2。
      4 C语言规定,在一个源程序中,main函数的位置 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 正确答案: C 2。
      5 以下叙述不正确的是 A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面 正确答案: D 2。6 下列叙述中正确的是 A)C语言编译时不检查语法 B)C语言的子程序有过程和函数两种 C)C语言的函数可以嵌套定义 D)C语言的函数可以嵌套调用 正确答案: D 2。
      7 以下叙述正确的是 A)在C程序中,每行中只能写一条语句 B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数 C)在C程序中,无论是整数还是实数,都能被准确无误地表示 D)在C程序中,%是只能用于整数运算的运算符 正确答案: D 2。
      8 以下说法错误的是 A)一个算法应包含有限个步骤 B)在计算机上实现的算法是用来处理数据对象的 C)算法中指定的操作,不能通过已经实现的基本运算执行有限次后实现 D)算法的目的是为了求解 正确答案: C 2。9 算法是指为解决某个特定问题而采取的确定且有限的步骤,下面不属于算法的五个特性的是 A)有零个输入或多个输入 B)高效性 C)有穷性 D)确定性 正确答案: B 2。
      10 下列关于C语言的说法不正确的是 A)C语言既具有高级语言的一切功能,也具有低级语言的一些功能 B)C语言中的每一条执行语句都必须用分号结束,分号不是C语言的一部分,是语句之间的分隔符号 C)注释可以出现在程序中任意合适的地方 D)命令行后面不能加分号,命令行不是C语言的语句 正确答案: B 2。
      11 以下说法错误的是 A)高级语言都是用接近人们习惯的自然语言和数学语言作为语言的表达形式 B)计算机只能处理由0和1的代码构成的二进制指令或数据 C)C语言源程序经过C语言编译程序编译之后生成一个后缀为。EXE的二进制文件 D)每一种高级语言都有它对应的编译程序 正确答案: C 2。
      12 C语言中用于结构化程序设计的3种基本结构是 A)顺序结构、选择结构、循环结构 B)if,switch,break C)for,while,do-while D)if,for,continue 正确答案: A。
      

    2***

    2011-11-09 20:54:07

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 176-195
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):