数据结构 线性表 顺序表示和实现
来源:互联网 发布:外国网友评论淘宝2016 编辑:程序博客网 时间:2024/04/28 21:59
predefine.h
//预定义函数返回结果头文件//文件名pre_define.h//函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define UNDERFLOW -2//假设数组维数的最大值为8#define MAX_ARRAY_SIZE 8//Status是函数的类型,其值是函数结果状态代码typedef int Status;//Boolean是布尔类型,其值是TRUE或FALSEtypedef int ElemType;
SqList.cpp<pre name="code" class="cpp"#include "pre_define.h"#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量#define LISTINCREMENT 10 // 线性表存储空间的分配增量typedef struct{ElemType *elem; // 存储空间基址int length; // 当前长度int listsize; // 当前分配的存储容量} SqList;bool compare(ElemType e1, ElemType e2){if (e1 == e2)return true;return false;}Status InitList_Sq(SqList &L){// 构造一个空的线性表LL.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));if (!L.elem) exit(OVERFLOW); // 存储分配失败L.length = 0; // 空表长度为0L.listsize = LIST_INIT_SIZE; // 初始存储容量return OK;}//销毁线性表LStatus DestroyList(SqList &L){free(L.elem);L.elem = NULL;L.length = 0;L.listsize = 0;return OK;}//将L重置为空表Status ClearList(SqList &L){L.elem = NULL;L.length = 0;return OK;}//判断L是否为空表Status ListEmpty(SqList L){if (L.length == 0)return TRUE;elsereturn FALSE;}//返回L中数据元素的个数int ListLength(SqList L){return L.length;}//用e返回L中第i个数据元素Status GetElem(SqList L , int i , ElemType &e){if (i < 1 || i > L.length)return ERROR;e = *(L.elem + i - 1);return OK;}//返回L中第1个与e满足关系compare()的数据元素的位序,若这样的元素不存在,则返回值为0int LocateElem(SqList L , ElemType e , Status (*compare)(ElemType , ElemType)){int i = 1;for (; i < L.length; i++){if (compare(e, L.elem[i])) break;}if (i <= L.length)return i;elsereturn 0;}//若cur_e是L中的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败Status PriorElem(SqList L ,ElemType cur_e , ElemType &pre_e){int i = 2;ElemType *p = L.elem + 1;while(i <= L.length && *p != cur_e){p++;i++;}if (i > L.length)return ERROR;else{pre_e = *(--p);return OK;}}//若cur_e是L中的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败Status NextElem(SqList L , ElemType cur_e , ElemType &next_e){int i = 1;ElemType *p = L.elem;while(i < L.length && *p != cur_e){p++;i++;}if (i == L.length)return ERROR;else{next_e = *(++p);return OK;}}//在L中第i个位置之前插入新的数据元素,L的长度加1Status ListInsert(SqList &L , int i , ElemType e){ElemType *p, *q, *newbase;if (i < 1 || i > L.length + 1) return ERROR;if (L.length == L.listsize){newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));if (!newbase) exit(OVERFLOW);L.elem = newbase;L.listsize += LISTINCREMENT;}// q为插入位置q = L.elem + i - 1;for (p = L.elem + L.length - 1; p >= q; --p) *(p+1) = *p;*q = e;++L.length;return OK;}//删除L中的第i个数据元素,并用e返回其值,L的长度减1Status ListDelete(SqList &L , int i , ElemType &e){ElemType *p, *q;if (i < 1 || i > L.length) return ERROR;q = L.elem + i - 1;for (p = q; p <= L.elem + L.length - 1; p++) *p = *(p+1);e = *q;--L.length;return OK;}//归并两个线性表void MergeList(SqList La , SqList Lb , SqList &Lc){ElemType *pa, *pb, *pc, *pa_last, *pb_last;pa = La.elem;pb = Lb.elem;Lc.listsize = Lc.length = La.length + Lb.length;pc = Lc.elem = (ElemType *)malloc(Lc.listsize * sizeof(ElemType));pa_last = La.elem + La.length - 1;pb_last = Lb.elem + Lb.length - 1;while(pa <= pa_last && pb <= pb_last){if(*pa <= *pb)*pc++ = *pa++;else*pc++ = *pa++;}while(pa <= pa_last)*pc++ = *pa++;while(pb <= pb_last)*pc++ = *pb++;}
- 数据结构 线性表 顺序表示和实现
- 数据结构之:线性表的顺序表示和实现
- 线性表的顺序表示和实现 - 数据结构
- 数据结构1:线性表的顺序表示和实现
- 数据结构之线性表的顺序表示和实现
- 【数据结构】-线性表的顺序表示和实现
- 线性表的顺序表示和实现(数据结构)
- 数据结构(1):线性表的顺序表示和实现
- 数据结构---线性表的顺序表示和实现
- 数据结构——线性表顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- cocos2d-x实例学习(14)之CCBlink
- 反转句子的词序,就是全部反一次,然后把每个词再返回来。
- Cookie介绍与操作
- cocos2d-x实例学习(15)之CCFadeIn, CCFadeTo和CCFadeOut
- 学习游戏开发应该看什么书
- 数据结构 线性表 顺序表示和实现
- 关于C++中的前置声明
- cocos2d-x实例学习(16)之CCTintTo&CCTintBy
- 开源:云寻觅中文分词 (Yunxunmi Chinese Word Segmentation) ,词汇440万,10万字文章分词并计算频率不超过1秒
- 扫盲贴(一)-- 直接影响走势的简称
- CC2X30 + Z-STACK, sleep时UART不能wake up的问题
- (转)#ifndef 与 #program once 的区别
- HTTP的状态码
- 24点游戏的编程算法(C语言实现)