跟我学数据结构--线性表的顺序存储
2013-10-04 14:06
323 查看
顺序存储定义
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表的一些常用操作
1 创建线性表
2 销毁线性表
3 清空线性表
4 将元素插入线性表
5 将元素从线性表中删除
6 获取线性表中某个位置的元素
7 获取线性表的长度
用如下一个柔性数组来实现顺序存储结构
1 创建线性表
//如果分配成功则建立一个线性表
i
2 销毁线性表
销毁线性表需要释放分配的内存
3 清空线性表
//在这里,只是把线性表的实际长度变为了0,但是没有对已经存储的数据进行清除
4获取线性表的长度
5获取线性表的容量
4 将元素插入线性表
插入元素算法
1 判断线性表是否合法
2 判断插入位置是否合法
3 把最后一个元素到插入位置的元素后移一个位置
4 将新元素插入
5 线性表长度加1
6.获取线性表中某个位置的元素
将元素从线性表中删除
源代码下载地址http://download.csdn.net/detail/hongkangwl/6353339
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表的一些常用操作
1 创建线性表
2 销毁线性表
3 清空线性表
4 将元素插入线性表
5 将元素从线性表中删除
6 获取线性表中某个位置的元素
7 获取线性表的长度
用如下一个柔性数组来实现顺序存储结构
typedef struct tag_seqlist { int capicity; //最大容量 int length; //目前该线性表的长度 Tseqlistnod* node; //线性表存储数据 } Tseqlist;
1 创建线性表
SeqList* SeqList_Create(int capacity) { Tseqlist* ret = NULL; if (capacity >= 0) { ret = (Tseqlist*) malloc(sizeof(Tseqlist) + sizeof(Tseqlistnod) * capacity); //为柔性数组分配内存空间 }
//如果分配成功则建立一个线性表
i
f (ret != NULL) { ret->capicity = capacity ; ret->length = 0; ret->node = (Tseqlistnod*)(ret + 1); } return ret; }
2 销毁线性表
销毁线性表需要释放分配的内存
void SeqList_Destroy(SeqList* list) { free(list) ; list = NULL ; }
3 清空线性表
//在这里,只是把线性表的实际长度变为了0,但是没有对已经存储的数据进行清除
void SeqList_Clear(SeqList* list) { //创建一个新的线性表指针指向要清除的线性表的第一个元素 Tseqlist* slist = (Tseqlist*) list; if (slist != NULL) { slist->length = 0; } }
4获取线性表的长度
int SeqList_Length(SeqList* list) { Tseqlist* slist = (Tseqlist*) list; int ret = -1; if (slist != NULL) { ret = slist->length; } return ret; }
5获取线性表的容量
int SeqList_Capacity(SeqList* list) { Tseqlist* slist = (Tseqlist*) list; int ret = -1; if (slist != NULL) { ret = slist->capicity; } return ret; }
4 将元素插入线性表
插入元素算法
1 判断线性表是否合法
2 判断插入位置是否合法
3 把最后一个元素到插入位置的元素后移一个位置
4 将新元素插入
5 线性表长度加1
int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) { Tseqlist* slist = (Tseqlist*) list; int ret = -1; int i = 0; //判断线性表是否合法 ret = (slist != NULL) && (slist->capicity >= slist->length + 1) && (pos >= 0); if (ret) { //判断插入位置是否合法 if (pos >= slist->length) { pos = slist->length; } for ( i = slist->length; i > pos; i--) { slist->node[i] = slist->node[i-1]; } slist->node[i] = (Tseqlistnod) node; slist->length++; } return ret; }
6.获取线性表中某个位置的元素
SeqListNode* SeqList_Get(SeqList* list, int pos) { Tseqlist* slist = (Tseqlist*) list; SeqListNode* ret = NULL; if ((slist != NULL) && (pos >= 0)) { if (slist->length >= pos) { ret = (SeqListNode*) slist->node[pos]; } } return ret; }
将元素从线性表中删除
删除元素算法 1 判断线性表是否合法 2 判断删除位置是否合法 3 将元素取出 4 将删除位置后的元素分别向前移动一个位置 5 线性表长度减1 SeqListNode* SeqList_Delete(SeqList* list, int pos) { Tseqlist* slist = (Tseqlist*) list; SeqListNode* ret = SeqList_Get(list, pos); int i = 0; if (slist != NULL) { for (i = pos+1; i < slist->length; i++) { slist->node[i-1] = slist->node[i]; } slist->length--; } return ret; }
源代码下载地址http://download.csdn.net/detail/hongkangwl/6353339
相关文章推荐
- [数据结构]程杰《大话数据结构》书中的顺序栈源码(
- 红黑树教程 by Julienne Walker
- 初学数据结构四
- 【数据结构】之队列的java实现(一)
- 数据结构全攻略--攻破非线性结构堡垒之树和二叉树(一)
- 学习数据结构的作用
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [数据结构]程杰《大话数据结构》静态链表代码(
- 用函数指针代替C++的引用参数 //严蔚敏《数据结构》(C语言版)课本源代码
- HDOJ,杭电1237简单计算器。。。数据结构小练习。
- 第1章 C语言与程序概述之1.2 数据结构与算法
- PHP数据结构练习笔记--线性表
- 数据结构与算法学习笔记——队列
- 数据结构与算法学习笔记——quick sort
- [IT综合面试]牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- java与数据结构(2)---java实现静态链表
- 二叉树的前序中序后序遍历 - 递归&非递归版本
- 堆栈
- 非递归遍历二叉树
- 数据结构之 图的存储结构和遍历方式