集合运算(实验题2.6)
来源:互联网 发布:网络歌曲《情醉》 编辑:程序博客网 时间:2024/06/06 05:26
集合运算。求集合的并,交和差运算。用有序单链表表示。
#pragma once////aggregate.h//集合运算;有序单链表实现//2013-9-4 23:41//typedef int element;typedef struct LNode{element data;LNode* next;}LinkList;void DisplayLinklist(LinkList* pNode);void InitSqList( LinkList* & pNode);int InsertLinklist(LinkList* &pNode,int i,element data);int Length(LinkList* pNode);void CreateListR(LinkList* & L,element a[],int length);void Sort_bubble(LinkList* & L);void Sort_insert(LinkList* & L);void Union(LinkList* ha,LinkList* hb,LinkList* &hc);void InterSect(LinkList* ha,LinkList* hb,LinkList* &hc);void Subs(LinkList* ha,LinkList* hb,LinkList* &hc);
//aggregate.cpp#include <stdio.h>#include <malloc.h>#include "aggregate.h"void InitSqList( LinkList* & pNode ){pNode = (LinkList*)malloc(sizeof(pNode));pNode->next = NULL;}int InsertLinklist( LinkList* &pNode,int i,element data ){LinkList* pTemp = pNode;int j = 0;while ( j < i-1 && pTemp != NULL){j ++;pTemp = pTemp->next;}if ( pTemp == NULL){return 0;}LinkList* p = (LinkList*)malloc(sizeof(LinkList));p->data = data;p->next = pTemp->next;pTemp->next = p;return 1;}void DisplayLinklist( LinkList* pNode ){LinkList* pTemp = pNode->next;while(pTemp != NULL){printf("%d,",pTemp->data);pTemp = pTemp->next;}printf("\n");}int Length( LinkList* pNode ){int length = 0;LinkList* p = pNode->next;while ( p!= NULL){p = p->next;length ++;}return length;}//尾插法建表void CreateListR( LinkList* & L,element a[],int length ){InitSqList(L);for ( int i = 1; i <= length; i ++){InsertLinklist(L,i,a[i-1]);}}//表排序,使用冒泡排序//看了教材上的算法,真不知道当初自己是怎么想出冒泡算法的!汗//2013-9-9void Sort_bubble( LinkList* & L ){if ( Length(L) <2){return;}LinkList* p = L;while (p->next != NULL){//printf("%d,",p->next->data);LinkList* q = p->next;LinkList* s = q->next;while ( s!=NULL){if (q->data > s->data) //交换p和s{p->next = s;q->next = s->next;s->next = q;}q = s;s = s->next;}p = p->next;}}//教材提供的排序算法,应该是插入排序//2013-9-9 23:39void Sort_insert(LinkList* &L){LinkList* head = L;if ( Length(L) < 2){return;}//p是要插入的节点LinkList* p = head->next->next;head->next->next = NULL;while(p != NULL){LinkList* q = p->next; //记录q的下一个节点while ( head->next != NULL && head->next->data < p->data){head = head->next;}p->next = head->next;head->next = p;head = L;p = q;}}//求两个有序集合并 //2013-9-10 22:38void Union( LinkList* ha,LinkList* hb,LinkList* &hc ){InitSqList(hc);//ha hb 两个需要比较的节点LinkList* pa = ha->next, *pb = hb->next;//pc标记hcLinkList* pc = hc;//每次创建的节点LinkList*s;while ( pa != NULL && pb != NULL){s = (LinkList*)malloc(sizeof(LinkList));pc->next = s;s->next = NULL;pc = s;if ( pa->data < pb->data){s->data = pa->data;pa = pa->next;}else if ( pa->data > pb->data){s->data = pb->data;pb = pb->next;}else{s->data = pa->data;pa = pa->next;pb = pb->next;}}//复制余下的节点if ( NULL == pa){pa = pb;}while ( pa != NULL){s = (LinkList*)malloc(sizeof(LinkList));pc->next = s;s->next = NULL;pc = s;s->data = pa->data;pa = pa->next;}}//求两个集合的交集//2013-9-10 23:20void InterSect( LinkList* ha,LinkList* hb,LinkList* &hc ){InitSqList(hc);//ha hb 两个需要比较的节点LinkList* pa = ha->next, *pb = hb->next;//pc标记hcLinkList* pc = hc;//每次创建的节点LinkList*s;while ( pa != NULL && pb != NULL){if ( pa->data < pb->data){pa = pa->next;}else if ( pa->data > pb->data){pb = pb->next;}else{s = (LinkList*)malloc(sizeof(LinkList));pc->next = s;s->next = NULL;pc = s;s->data = pa->data;pa = pa->next;pb = pb->next;}}}//求两个有序集合的差//2013-9-10 23:35void Subs( LinkList* ha,LinkList* hb,LinkList* &hc ){InitSqList(hc);//ha hb 两个需要比较的节点LinkList* pa = ha->next, *pb = hb->next;//pc标记hcLinkList* pc = hc;//每次创建的节点LinkList*s;while ( pa != NULL && pb != NULL){if ( pa->data < pb->data){s = (LinkList*)malloc(sizeof(LinkList));pc->next = s;s->next = NULL;pc = s;s->data = pa->data;pa = pa->next;}else if ( pa->data > pb->data){pb = pb->next;}else{pa = pa->next;pb = pb->next;}}//复制余下的节点if ( NULL == pb){while ( pa != NULL){s = (LinkList*)malloc(sizeof(LinkList));pc->next = s;s->next = NULL;pc = s;s->data = pa->data;pa = pa->next;}}}
#include <stdio.h>#include "aggregate.h"int main(){LinkList* ha;element a[]= {2,1,5};CreateListR(ha,a,3);//DisplayLinklist(ha);//printf("%d,",Length(ha));//Sort(ha);Sort_insert(ha);DisplayLinklist(ha);LinkList* hb;element b[]= {3,1,2,4};CreateListR(hb,b,4);//DisplayLinklist(hb);//printf("%d,",Length(ha));//Sort(ha);Sort_insert(hb);DisplayLinklist(hb);LinkList* hc;Subs(hb,ha,hc);DisplayLinklist(hc);return 0;}
- 集合运算(实验题2.6)
- 实验一 集合的定义与运算
- 离散数学实验源代码----集合运算和关系运算
- 集合运算(1)
- 集合运算(标准差)
- 链队列基本运算(实验题3.4)
- C++实验题---填空(运算符重载)
- C++实验题---填空(运算符重载A)
- C++实验题---填空(运算符重载B)
- SQL集合运算(转载)
- 蓝桥杯 集合运算(set)
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 为什么要学习c语言
- WAS 类加载
- C#找出字符串中最大长度的回文
- Using Oracle DBMS_SYSTEM.SET_EV and Oracle DBMS_SYSTEM.READ_EV
- 队列-循环队列/链队列
- 集合运算(实验题2.6)
- Java 线程池学习
- OCP-1Z0-053-V12.02-189题
- 为什么要学习C语言
- zoj 3366 Light Bulb 三分
- 创建单链表的4种方式
- 使用spring 并加载模板发送Email 发邮件 java 模板
- POJ 2586 Y2K Accounting Bug 贪心
- C++ STL学习笔记2--String