数据结构初学1(线性表)
来源:互联网 发布:qq变声软件 编辑:程序博客网 时间:2024/05/21 03:58
总结一下线性表的知识,今晚只学习了顺序结构的线性表,所以不提连是存储结构的线性表!
理论知识模块
一、线性表的定义
1、线性表(List)是零个或多个数据元素的集合2、线性表中的数据元素之间是有顺序的
3、线性表中的数据元素个数是有限的
4、线性表中的数据元素的类型必须相同
二、线性表的概念
1、 线性表是具有相同类型的n( ≥0)个数据元素的有限序列
2、线性表是数据元素的有序并且有限的集合
3、线性表中的数据元素必须是类型相同的
4、线性表可用于描述“队列类型”关系的问题
三、线性表的一些常用操作
1、创建线性表
2、销毁线性表
3、清空线性表
4、将元素插入线性表
5、将元素从线性表中删除
6、获取线性表中某个位置的元素
7、获取线性表的长度
四、线性表在程序中表现为一种特殊的数据类型线性表的操作在程序中的表现为一组函数
ListList* List_Create();void List_Destroy(List* list);void List_Clear(List* list);int List_Insert(List* list, ListNode* node, int pos);ListNode* List_Delete(List* list, int pos);ListNode* List_Get(List* list, int pos);int List_Length(List* list);
五、顺序存储结构
1、线性表的顺序存储结构指的是用一段 指的是用一段地址连续的存储单元依次存储线性表的数据元素。
2、在C语言中可以用一维数组来实现顺序存储结构
存储空间的起始位置::数组 数组n od e
线性表的最大容量::数组长度 数组长度MA XSI ZE
线性表的当前长度:length
举例如下:
实践模块
接下来就是通过一些程序来验证理论了
一个一个的充实前面的顺序表操作函数
一、获取元素函数
SeqListNode* SeqList_Get(SeqList* list, int pos) // O(1) { TSeqList* sList = (TSeqList*)list; SeqListNode* ret = NULL; if( (sList != NULL) && (0 <= pos) && (pos <= sList->length) ) { ret = (SeqListNode*)(sList->node[pos]); } return ret;}
二、插入元素算法
int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) // O(n) { TSeqList* sList = (TSeqList*)list; int ret = (sList != NULL); int i = 0; ret = ret && (sList->length + 1 <= sList->capacity); ret = ret && (0 <= pos); 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] = (TSeqListNode)node; sList->length++; } return ret;}
三、删除元素算法
SeqListNode* SeqList_Delete(SeqList* list, int pos) // O(n){ TSeqList* sList = (TSeqList*)list; SeqListNode* ret = SeqList_Get(list, pos); int i = 0; if( ret != NULL ) { for(i=pos+1; i<sList->length; i++) { sList->node[i-1] = sList->node[i]; } sList->length--; } return ret;}四、获取线性表大小
int SeqList_Capacity(SeqList* list) // O(1){ TSeqList* sList = (TSeqList*)list; int ret = -1; if( sList != NULL ) { ret = sList->capacity; } return ret;}
五、线性表长度
int SeqList_Length(SeqList* list) // O(1){ TSeqList* sList = (TSeqList*)list; int ret = -1; if( sList != NULL ) { ret = sList->length; } return ret;}六、清空线性表
void SeqList_Clear(SeqList* list) // O(1){ TSeqList* sList = (TSeqList*)list; if( sList != NULL ) { sList->length = 0; }}
七、创建线性表
SeqList* SeqList_Create(int capacity) // O(1){ TSeqList* ret = NULL; if( capacity >= 0 ) { ret = (TSeqList*)malloc( sizeof(TSeqListNode) * capacity); } if( ret != NULL ) { ret->capacity = capacity; ret->length = 0; ret->node = (TSeqListNode*)(ret + 1); } return ret;}
- 数据结构初学1(线性表)
- 数据结构线性表(1)
- 写给初学数据结构的同学之(线性表(顺序表,链表))
- 线性表之单链表学习小结(初学数据结构必看)
- 数据结构线性表1
- 数据结构--1、线性表
- 数据结构1--线性表
- 数据结构(1):线性表
- 数据结构(1)-线性表
- 数据结构(线性表)
- 数据结构(线性表)
- 数据结构(线性表)
- 数据结构(线性表)
- 【Data】数据结构之线性表(1)
- 数据结构(1)-线性链表
- 数据结构学习-线性表(1)
- 数据结构-线性表(List)1
- 数据结构——线性表(1)
- java 通过子类怎么调用父类已经被重写的方法
- 解决Unix环境高级编程示例中的 undefined reference to `err_quit'
- 这样的老师值得我敬佩
- Android 游戏引擎libgdx之Box2D 案例实践——打砖块(一)
- 数据结构笔记之二链表
- 数据结构初学1(线性表)
- open-flash-chart中文使用参数对照表
- 如何不让键盘挡住UITextField控件
- 详解XP托盘图标结构!
- 黑马程序员_IO流
- C语言编译过程总结详解
- 微软编程之美2013全国挑战赛 初赛第1场 第2题
- Swap Nodes in Pairs
- 背包问题九讲笔记_01背包