博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构---顺序表
阅读量:7075 次
发布时间:2019-06-28

本文共 2484 字,大约阅读时间需要 8 分钟。

利用一组连续地址的内存单元来存储整张线性表的结构。 具有下列特征:

1. 顺序表的表名唯一。

2. 内存单元连续存储。

3. 数据顺序存放,元素之间有先后关系。

下面的例子中,我们动态的申请一张线性表。

主要定义的方法有

InitSqlist : 初始化list。

DeleteSqlist: 删除list。

InsertElem:  添加元素。当插入元素,表的元素容量大于MAXSIZE的时候,重新分配表的大小,并且copy原来的元素。采用C语言的函数realloc来实现。

DeleteElem:删除元素。

#include
#include
#define MAXSIZE 10000#define ADDSIZE 100typedef int ElemType;// the definition of sequence tablestruct Sqlist{ ElemType *m_pElem; // the first element address int m_iLength; // the number of the elements int m_iListSize; // the max number of the elements};// initilize the sqlistvoid InitSqlist(Sqlist *L){ L->m_pElem = (ElemType *)malloc(MAXSIZE * sizeof(ElemType)); L->m_iLength = 0; L->m_iListSize = MAXSIZE;}// Delete the sqlistvoid DeleteSqlist(Sqlist *L){ free (L->m_pElem); L->m_pElem = nullptr; L->m_iLength =0; L->m_iListSize =0;}// insert the element to ith positionvoid InsertElem(Sqlist *L, int i, ElemType item){ if(i < 1 || i > L->m_iLength + 1)exit(0); // add the memory for list ElemType *base, *insertPtr, *p; if(L->m_iLength == L->m_iListSize) { base = (ElemType*) realloc(L->m_pElem, (L->m_iListSize + ADDSIZE)*sizeof(ElemType)); L->m_iListSize+= ADDSIZE; L->m_pElem = base; } insertPtr = &(L->m_pElem[i-1]); for(p = &(L->m_pElem[L->m_iLength-1]); p>= insertPtr;p--) { *(p+1) = *p; } *insertPtr = item; L->m_iLength++;}// delete the element for ith positionvoid DeleteElem(Sqlist *L, int i){ if(i<1 || i> L->m_iLength)exit(0); ElemType *pDelete, *q; pDelete = &(L->m_pElem[i-1]); q = &(L->m_pElem[L->m_iLength-1]); for(++pDelete; pDelete <=q ;pDelete++) { *(pDelete-1) = *pDelete; } L->m_iLength--;}// print the list elementsvoid PrintElement(Sqlist *L){ int iLength = L->m_iLength; if(iLength ==0)exit(0); printf("list Max size =%d \n", L->m_iListSize); printf("list current length = %d \n",L->m_iLength); for(int i= 0;i
m_pElem[i]);}void main(){ Sqlist list; InitSqlist(&list); InsertElem(&list, 1, 1); InsertElem(&list, 2, 2); InsertElem(&list, 3, 3); PrintElement(&list); DeleteElem(&list, 1); DeleteElem(&list, 1); PrintElement(&list); DeleteSqlist(&list);}

优点:1. 无须增加额外的内存空间来描述元素之间的逻辑。2.可以快速的读取表中的任一位置。

缺点:1. 插入和删除操作需要移动大量的元素。2. 当线性表的长度添加时,需要申请额外的空间,然后进行copy操作。3. 存储空间容易造成大量的碎片。

转载于:https://www.cnblogs.com/bruce81/archive/2013/02/19/2917905.html

你可能感兴趣的文章
点击失去焦点的文字
查看>>
【git】git入门之把自己的项目上传到github
查看>>
GO语言总结(3)——数组和切片
查看>>
贪吃蛇
查看>>
Android提供的layout文件存放位置
查看>>
[C++]C++类基本语法
查看>>
Java跨域解决
查看>>
Django 配置文件 settings.py
查看>>
php生成随机密码的几种方法
查看>>
Fouandation(NSString ,NSArray,NSDictionary,NSSet) 中常见的理解错误区
查看>>
新博客 Fighting
查看>>
python的单、双、多分支流程控制
查看>>
accept_mutex与性能的关系 (nginx)
查看>>
滚动条
查看>>
20. Valid Parentheses
查看>>
cssReset - css初始化
查看>>
mybatis generator Date类型时间丢失
查看>>
python 基础 4.5 用函数实现九九乘法表
查看>>
python 基础 9.2 mysql 事务
查看>>
利用表格分页显示数据的js组件datatable的使用
查看>>