线性表的操作 (2.1) C = A U B
来源:互联网 发布:人员优化方案 编辑:程序博客网 时间:2024/05/10 16:33
//操作结果 C = AUB#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define LIST_INIT_SIZE 10 //动态内存的初始分配量#define LISTINCREMENT 2 typedef struct SqList{int *elem;int length;int listsize;}SqList;bool InitList(SqList *L); //线性表的初始化bool ListInsert(SqList *L,int pos,int e); //在第pos个位置插入ebool ListTraverse(SqList *L); //输出线性表中的元素int comp(int c1,int c2);void MergeList(SqList La,SqList Lb, SqList * Lc);int main(){SqList La, Lb, Lc;int j;InitList(&La); //在表La中插入5个元素for(j = 1; j <= 5; j++)ListInsert(&La,j,j);printf("La = ");ListTraverse(&La); //输出La的元素InitList(&Lb);for(j = 1; j <= 5; j++) //在表Lb中插入5个元素ListInsert(&Lb,j,2*j);printf("Lb = ");ListTraverse(&Lb);MergeList(La,Lb,&Lc);printf("Lc = ");ListTraverse(&Lc);return 0;}bool InitList(SqList *L) //线性表的初始化{L->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));if(L->elem == NULL){printf("内存分配失败 程序终止!\n");exit(-1);}L->length = 0;L->listsize = LIST_INIT_SIZE;return 0;}bool ListInsert(SqList *L,int pos,int e) //在第pos个位置插入e{int * newbase, *p, *q;if(pos < 1 || pos > L->listsize) //pos值不合法return false;if(L->length >= L->listsize) //当前存储空间已满 增加分配{newbase = (int *)realloc(L->elem,(L->listsize + LISTINCREMENT)*sizeof(int));if(newbase == NULL){printf("内存分配失败 程序终止!\n");exit(-1);}L->elem = newbase;L->listsize += LISTINCREMENT;}q = L->elem + pos - 1;for(p = L->elem + L->listsize - 1; p >= q; p--) //插入位置及插入位置之后的元素右移*(p+1) = *p;*q = e; //插入eL->length++;return true;}bool ListTraverse(SqList *L) //输出线性表中的元素{int *p;int i;p = L->elem;for(i = 1; i <= L->length; i++)printf("%d ",*p++);printf("\n");return true;}void MergeList(SqList La,SqList Lb, SqList * Lc){int *pa, *pa_last, *pb, *pb_last, *pc;pa = La.elem;pb = Lb.elem;Lc->listsize = La.length + Lb.length;pc = Lc->elem = (int *)malloc(Lc->listsize*sizeof(int));if(Lc->elem == NULL){printf("内存分配失败 程序终止!\n");exit(-1);}pa_last = La.elem + La.length - 1;pb_last = Lb.elem + Lb.length - 1;while(pa <= pa_last && pb <= pb_last) //表La和表Lb均为非空{switch(comp(*pa,*pb)){case 0: pb++;case 1: *pc++ = *pa++;break;case -1: *pc++ = *pb++;}}while(pa <= pa_last) //表La非空 表Lb为空*pc++ = *pa++;while(pb <= pb_last)*pc++ = *pb++;Lc->length = pc - Lc->elem; }int comp(int c1,int c2){int i;if(c1 < c2)i = 1;else if(c1 = c2)i = 0;elsei = -1;return i;}
程序执行结果:
0 0
- 线性表的操作 (2.1) C = A U B
- 线性表的操作 (2.2) C = A U B
- 线性表的操作 (2)实现 C = A U B
- 线性表的操作 (1)实现 A= A U B
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 数据结构-C语言 单链线性表实现归并 C=A∪B
- 1.2链式结构 实现 C = A U B
- 假设利用两个线性表La和Lb分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的 集合A=AUB。这就要求对线性表作如下操作:扩大线性表La,将存在于线性表Lb中而不存在于线
- C语言线性表的基本操作
- python 多个字符串合并操作"a" 'b' "c"="a"+'b'+"c"=abc
- 合并A,B为线性表C(表C用顺序表实现)
- 逻辑操作:c=(a>b)?a:b;等同于下式 if(a>b) c=a; else c=b;
- 静态链表实现(A-B)U(B-A)
- Windows的A盘 ||B盘 || C盘 || CD|| U盘
- c = ( (++a) + (b++) );
- A=B+C
- $a && $b = $c的问题
- 创建集合A,集合B。求表达式(A-B)U(B-A)的值。
- 对spring中AOP的理解(事务管理)
- 通过在使用ids.xml管理资源ID来提高效率
- 1003-C专题三
- 拆装箱 == 与equals int 和Integer 堆和栈
- 异或运算
- 线性表的操作 (2.1) C = A U B
- javaweb学习总结(五)——Servlet开发(一)
- Mybatis_PageHelper的使用
- 读取与解析json类型数据
- Linux/Mac 下 vi 命令
- UVa 11827 Maximum GCD
- git命令大全
- C++第9周项目 数组和指针 【项目3-人数不定的工资类】(复习新版)
- foreach语句使用总结