【数据结构】数据结构C语言的实现(线性表)
来源:互联网 发布:加油站 知乎 编辑:程序博客网 时间:2024/04/27 01:16
线性表
/* * 线性表 */#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INIT_SIZE 10 // 初始化线性表长度#define INCREMENT_SIZE 5typedef int Status;typedef int Elemtype;typedef struct{ Elemtype *elem; // 线性表的首地址 int length; // 线性表长度 int size; // 线性表大小} SqList;// 初始化线性表Status InitList(SqList *L){ // 开辟线性表 L->elem = (Elemtype *)malloc(INIT_SIZE * sizeof(Elemtype)); if (!L->elem) return ERROR; // 初始化线性表 L->length = 0; L->size = INIT_SIZE; return OK;}// 销毁线性表Status DestroyList(SqList *L){ // 释放线性表空间,长度大小置零 free(L->elem); L->length = 0; L->size = 0; return OK;}// 置空线性表Status ClearList(SqList *L){ L->length = 0; return OK;}// 判断线性表是否为空Status isEmpty(const SqList L){ if (L.length == 0) return TRUE; else return FALSE;}// 返回线性表长度Status getLength(const SqList L){ return L.length;}// 返回第i个元素Status GetElem(const SqList L, int i, Elemtype *e){ if (i < 1 || i > L.length) return ERROR; *e = L.elem[i - 1]; return OK;}// 比较两个元素Status compare(Elemtype e1, Elemtype e2){ if (e1 == e2) return 0; else if (e1 < e2) return -1; else return 1;}// 返回元素e的indexStatus FindElem(const SqList L, Elemtype e, Status (*compare)(Elemtype, Elemtype)){ int i; for (i = 0; i < L.length; i++) { if (!(*compare)(L.elem[i], e)) return i + 1; } if (i >= L.length) return ERROR; return -1;}// 返回前一个元素(如果有的话)Status PreElem(const SqList L, Elemtype cur_e, Elemtype *pre_e){ int i; for (i = 0; i < L.length; i++) { if (cur_e == L.elem[i]) { if (i != 0) { *pre_e = L.elem[i - 1]; return OK; } else{ return ERROR; } } } if (i >= L.length) return ERROR; return ERROR;}// 返回下一个元素(如果有的话)Status NextElem(const SqList L, Elemtype cur_e, Elemtype *pre_e){ int i; for (i = 0; i < L.length; i++) { if (cur_e == L.elem[i]) { if (i < L.length - 1) { *pre_e = L.elem[i + 1]; return OK; } else { return ERROR; } } } if (i >= L.length) return ERROR; return ERROR;}// 在index = i处插入元素eStatus InsertElem(SqList *L, int i, Elemtype e){ Elemtype *_new; if (i < 1 || i > L->length + 1) return ERROR; // 如果线性表的大小不足,则开辟空间 if (L->length >= L->size) { _new = (Elemtype *)realloc(L->elem, (L->size + INCREMENT_SIZE) * sizeof(Elemtype)); if (!_new) return ERROR; L->elem = _new; L->size += INCREMENT_SIZE; } // 把从i到length的元素统一往后移一位 Elemtype *p = &L->elem[i - 1]; Elemtype *q = &L->elem[L->length - 1]; for (; q >= p; q--) *(q + 1) = *q; // 把元算e放到第i个 *p = e; ++L->length; return OK;}// 删除第i个元素,被删除的元素通过指针*e返回Status DeleteElem(SqList *L, int i, Elemtype *e){ if (i < 1 || i > L->length) return ERROR; // 删除第i个元素,并且把从第i+1个到第length个统一向前移一位 Elemtype *p = &L->elem[i - 1]; *e = *p; for (; p < &L->elem[L->length]; p++) *(p) = *(p + 1); --L->length; return OK;}// 访问元素void visit(Elemtype e){ printf("%d ", e);}// 遍历线性表Status TraverseList(const SqList L, void (*visit)(Elemtype)){ int i; for (i = 0; i < L.length; i++) visit(L.elem[i]); return OK;}/* * 主函数测试 */int main(){ SqList L; if (InitList(&L)) { Elemtype e; printf("init_success\n"); int i; for (i = 0; i < 10; i++) InsertElem(&L, i + 1, i); printf("length is %d\n", getLength(L)); if (GetElem(L, 1, &e)) printf("The first element is %d\n", e); else printf("element is not exist\n"); if (isEmpty(L)) printf("list is empty\n"); else printf("list is not empty\n"); printf("The 5th at %d\n", FindElem(L, 5, *compare)); PreElem(L, 6, &e); printf("The 6's previous element is %d\n", e); NextElem(L, 6, &e); printf("The 6's next element is %d\n", e); DeleteElem(&L, 1, &e); printf("delete first element is %d\n", e); printf("list:"); TraverseList(L, visit); if (DestroyList(&L)) printf("\ndestroy_success\n"); }}
init_successlength is 10The first element is 0list is not emptyThe 5 at 6The 6's previous element is 5The 6's next element is 7delete first element is 0list:1 2 3 4 5 6 7 8 9 destroy_success
0 1
- 【数据结构】数据结构C语言的实现(线性表)
- 数据结构 C语言实现 线性表的链式实现
- 线性表数据结构C语言实现
- 数据结构_1:线性表: C语言实现
- 【C语言 数据结构】 简单线性表实现
- C语言实现数据结构--线性表
- C语言数据结构-线性表-双链表实现
- 数据结构之---c语言实现线性表的顺序表
- 数据结构中线性表的c语言代码实现
- 数据结构--线性表.顺序表(C语言实现)
- 数据结构线性表各种结构代码实现(C语言)
- C语言数据结构--(线性表一)
- 数据结构(C语言)线性表 -单链表
- 数据结构C语言实现线性表(顺序实现)的初始化与基本操作
- 数据结构 线性表的基本操作(C语言)
- 数据结构(严蔚敏)C语言实现---线性表的顺序存储
- 数据结构(线性表子系统:c实现)
- 数据结构--线性表C实现
- java 解压&压缩
- Tkinter教程3
- MySQL数据库优化(二)
- Unity3D——VRTK-SteamVR Unity Toollit插件工具的运用
- Nginx搭建反向代理服务器过程详解
- 【数据结构】数据结构C语言的实现(线性表)
- java 中的instanceof 运算符
- java基础
- JAVA面试题和项目面试核心要点精华总结(想进大公司必看)
- git上传java项目代码(初次上传,以后可以用elipse插件上传)
- Java 反转链表的两种方法
- 将一个数组分割成两个两个一组
- Sass学习之路(11)——Sass运算
- 【数据结构】数据结构C语言的实现(单链表)