线性表的顺序储存及基本操作
2017-03-31 21:21
337 查看
#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; }
相关文章推荐
- 增序顺序储存线性表的基本操作
- 线性表_顺序存储/基本操作
- 顺序线性表的基本操作算法
- 线性表的基本操作实现 - 链表与顺序表
- 线性表的顺序表示和实现基本操作之插入元素
- 顺序线性表的基本操作(C语言实现)
- 线性顺序表的基本操作
- 线性表之顺序存储,基本操作
- 线性表的顺序表示及其基本操作
- 线性表顺序存储的基本操作
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 顺序线性表的定义与基本操作
- 线性表----循环队列(顺序表示)的基本操作
- 线性表的基本操作实现及其应用之顺序表的建立与操作实现
- 学习笔记---线性表的基本操作---顺序存储(C语言)
- 线性表----顺序栈的基本操作
- 数据结构C语言实现线性表(顺序实现)的初始化与基本操作
- 顺序结构实现线性表的基本操作
- 顺序线性表的基本操作
- 数据结构之线性表(顺序表)的基本操作