线性表的顺序储存及基本操作
来源:互联网 发布:手机影视剪辑软件 编辑:程序博客网 时间:2024/06/15 18:08
#include<stdio.h>#include<stdlib.h>#define INIT_SIZE 10 // 线性表初始容量#define INCREMENT_SIZE 5 // 当线性表容量不够时,增加元素之前,线性表增长量#define OVERFLOW -5 // 内存分配失败后的退出代号typedef struct { int *data; // 线性顺序表的基地址(首地址)ַ int length; // 当前线性表元素个数 int capacity; //当前线性表的容量} SequenceList;/* * 初始化线性表分配内存空间以及相关参数设定 */void init_list(SequenceList *slist){ slist->data = (int *)malloc(INIT_SIZE*sizeof(int)); if(!slist->data) exit(OVERFLOW); // 如果分配内存失败则退出程序 slist->length = 0; //初始化当前元素个数为0 slist->capacity = INIT_SIZE; // 初始化当前线性表容量为INIT_SIZE}/* * 插入操作 */void Insert(SequenceList *slist, int element, int index){ // 插入之前判断线性表的容量是否够大,如果不够,按照INCREMENT_SIZE扩充容量 // 重新申请内存空间 if(index >= slist->capacity) { slist->data = (int *)realloc(slist->data, (slist->capacity + INCREMENT_SIZE)*sizeof(int)); if(!slist->data) exit(OVERFLOW); slist->capacity += INCREMENT_SIZE; } for(int i=slist->length-1; i > index ; i--) *(slist->data + i + 1) = *(slist->data + i); *(slist->data + index) = element; slist->length++;}/* * 索引操作 */int getElement(SequenceList *slist, int index){ return *(slist->data + index);}/* * 更新操作 */void updateElement(SequenceList *slist, int index, int newValue){ *(slist->data + index) = newValue;}/* * 删除操作 */int deleteElement(SequenceList *slist, int index){ int result = *(slist->data + index); for(int i=index; i < slist->length; i++) *(slist->data + i) = *(slist->data + i + 1); slist->length--; return result;}/* * 合并操作 */SequenceList mergeList(SequenceList slist1, SequenceList slist2){ SequenceList newList; init_list(&newList); int p = 0; int q = 0; int r = 0; while(p<slist1.length && q<slist2.length){ int a = *(slist1.data+p); int b = *(slist2.data+q); printf("compare a = %d, b = %d\n", a, b); if (a <= b){ Insert(&newList, a, r); p++; }else { Insert(&newList, b, r); q++; } r++; } while(p < slist1.length) { Insert(&newList, *(slist1.data + p), r); r++; p++; } while(q < slist2.length) { Insert(&newList, *(slist2.data + q), r); r++; q++; } return newList;}/* * 打印线性顺序表的所有信息 */void print_slist_info(SequenceList slist){ printf("sequence list\ncapacity is %d\nlength is %d\n", slist.capacity, slist.length); for(int i=0; i < slist.length; i++) printf("%d ", *(slist.data + i));}int main(){ SequenceList sequence_list; init_list(&sequence_list); return 0;}
0 0
- 线性表的顺序储存及基本操作
- 增序顺序储存线性表的基本操作
- 线性表的顺序储存及运算实现-------------顺序表
- 线性表的顺序储存
- 线性表的顺序储存
- 线性表的顺序储存及运算实现
- 间接寻址储存的线性表—基本操作实现
- 线性顺序表的基本操作
- 顺序线性表的基本操作算法
- 线性表----顺序栈的基本操作
- 线性表顺序存储的基本操作
- 顺序线性表的基本操作
- 数据结构 线性表的顺序储存结构
- 数据结构---线性表的顺序储存
- 数据结构 --- 线性表 顺序储存 链式储存
- 线性表的顺序储存(顺序表)
- 线性表--顺序储存结构
- 线性表的顺序和链式存储表示及基本操作的实验
- maven引入Oracle11g驱动
- HashMap的实现与优化
- 网络流 入门整理
- P1966 火柴排队
- 中括号序列绘制(比较有意思)
- 线性表的顺序储存及基本操作
- renderScript实现图片处理雾化效果 浮雕效果
- PTA 5-15 球队“食物链” (2017cccc初赛L3-3)
- linux权限管理
- bootsect MBR VBR 磁盘 引导 修复
- 条件转移指令应用(1104)
- ITOO整体部署图
- 2016 第七届 蓝桥杯第7题 剪邮票(bfs+dfs)
- 预加载和懒加载(延迟加载)