顺序表的合并
来源:互联网 发布:怎么找淘宝客推广 编辑:程序博客网 时间:2024/05/27 01:07
参考书目
清华大学 严蔚敏 《数据结构》C语言版
《数据结构》算法实现及其解析 高一凡
代码
#include<stdio.h>#include<process.h>#include<malloc.h>#define LIST_INIT_SIZE 10#define LISTINCREMENT 2#define OVERFLOW -2#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int ElemType;typedef int Status;typedef struct { ElemType *elem; int length; int listsize;}SqList;Status InitList(SqList &L){//操作结果:构造一个空的顺序线性表 L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; return OK;}Status ListInsert(SqList &L, int i, ElemType e) //算法2.4{ //初始条件:顺序线性表L已存在, 1≤i ≤ListLenth(L) + 1 //操作结果:在L中第i个位置之前插入新的数据元素e,L的长度+1 ElemType *newbase, *q, *p; if(i < 1 || i > L.length + 1) return ERROR; if(L.length >= L.listsize) //当前存储空间已满,增加分配 { if(!(newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType)))) exit(OVERFLOW); L.elem = newbase; L.listsize+=LISTINCREMENT; } q = L.elem + i - 1; for(p = L.elem + L.length - 1; p >= q; --p) *(p + 1) = *p; *q = e; ++L.length; return OK;}Status ListTraverse(SqList L, void(*vi)(ElemType&)){ //初始条件:顺序线性表L已存在 //操作结果:依次对L的每个数据元素调用函数vi()。一但vi()失败,则操作失败 // vi()的形参加&, 表明可通过调用vi()改变元素的值 ElemType *p; int i; p = L.elem; for(i = 1; i <= L.length; i++) vi(*p++); printf("\n"); return OK;}void MergeList(SqList La, SqList Lb, SqList &Lc){ ElemType *pa, *pa_last, *pb, *pb_last, *pc; pa = La.elem; pb = Lb.elem; pa_last = La.elem + La.length - 1; pb_last = Lb.elem + Lb.length - 1; Lc.listsize = Lc.length = La.length + Lb.length; pc = Lc.elem = (ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem) exit(OVERFLOW); while(pa <= pa_last && pb <= pb_last) { *pa<=*pb ? *pc++ = *pa++ : *pc++ = *pb++; } while(pa <= pa_last) *pc++ = *pa++; while(pb <= pb_last) *pc++ = *pb++;}void print(ElemType &c){ printf("%d ", c);}int main(){ SqList La, Lb, Lc; int j; InitList(La); for(j = 1; j <= 5; j++) { ListInsert(La, j, j); } printf("La= "); ListTraverse(La,print); InitList(Lb); for(j = 1; j <= 5; j++) { ListInsert(Lb, j, 2*j); } printf("Lb= "); ListTraverse(Lb,print); MergeList(La, Lb, Lc); printf("Lc= "); ListTraverse(Lc, print); return 0;}
运行结果
感受
- 初学数据结构,实现算法的时候用的语言很别扭,c/c++混用
- 一开始while写成了if, pa,pb也混用,导致编译不通过
while(pa <= pa_last) *pc++ = *pa++; while(pb <= pb_last) *pc++ = *pb++;
- 我觉得等我学习一段时间以后回来再看这个程序可能会简化它吧
0 0
- 顺序表的合并
- 顺序表的合并
- 顺序表的合并
- 顺序表的合并
- /*顺序表的合并运算*/
- 数据结构-----顺序表的合并
- 顺序有序表的合并
- 线性表中顺序表的合并
- 非递减顺序表的合并
- 两个顺序链表的合并【openjudge】
- 【数据结构】顺序表的合并算法
- 非递减顺序表的合并
- 顺序表的非递减数列合并
- 顺序表的各种操作以及合并
- 【实验】两个有序顺序表的合并
- 顺序表实现两个集合的合并
- 《数据库》顺序有序表的合并
- 【学习笔记】有序顺序表的合并
- 算法思想之递归法
- cpio
- linux基本操作命令
- mysql-分区
- lintcode: House Robber
- 顺序表的合并
- XCode快捷键
- vim的环境设置参数
- Linux命令格式及帮助命令详解
- 杭电2082
- tomcat nio与bio技术对比
- MySQL数据库常用命令大全
- Java基础----Java容器之集合
- CSS控制链接