顺序存储定义
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表的一些常用操作
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
分享到:
相关推荐
数据结构---线性表之单链表,包括单链表的创建、插入、删除等,C语言编写
数据结构---线性表
数据结构-----JAVA类集学习之-------线性表.pdf
线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据结构-严蔚敏)线性表的链式实现(数据...
数据结构---线性表之双链表,创建、插入、删除,完整的C代码
c语言实现的线性表顺序存储结构,包括初始化,设置线性表的值,增,删,改,查。
数据结构系列1----线性表全集(C语言)数据结构系列1----线性表全集(C语言)数据结构系列1----线性表全集(C语言)
数据结构-C++程序 线性表的线性存储例子-在dev c++平台运行正常,用于教学使用
数据结构-线性表数据结构-线性表数据结构-线性表数据结构-线性表数据结构-线性表
在众多数据结构当中,线性表是最简单、也是最...本实验相对比较简单,通过本实验,对顺序表基本操作及 其组合应用的演练,加深对线性表顺序存储方法及其基本操作的理解,为以后进一步学习更 复杂的数据结构打下基础。
线性表的顺序存储结构及实现http://blog.csdn.net/eeeduo/article/details/37698615
这是帮人做的一个期末考试题,从 txt 文件读取数据存储到 SqList 中。 实现了 SqList 的插入元素、删除元素操作。 代码在 VS2010 下编译通过。
数据结构与算法----线性表及Java实现顺序表、链表、栈、队列 定义线性表节点的结构.pdf
数据结构--线性表--思维导图.pdf
数据结构实验报告,线性表顺序存储结构的操作及其应用 包括实验过程,实验目的,实验总结等详细内容,仅供大家学习交流!
数据结构与算法-线性表 定义线性表节点的结构.pdf
大学计算机:教学课件:数据结构和算法-线性表 定义线性表节点的结构.ppt
C与数据结构-第13次课(2)--顺序线性表的定义、创建和输出 定义线性表节点的结构.ppt
数据结构--线性表.cpp
线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储