数据结构之线性结构(顺序表)【一】
来源:互联网 发布:unity3d movietexture 编辑:程序博客网 时间:2024/05/17 17:54
顺序表类型定义:
#define ListSize 100 //定义表空间大小,根据实际需要
typedef int DataType;//数据类型假定为int
typedef struct {
DataType data[DataType],//data用于存放节点
int length,
}SeqList;
注:ListSize应该仔细选值,既要满足需求又不能过大,导致浪费存储空间。
基本操作:
初始化顺序表
void InitList (SeqList *L)
{\\顺序表的初始化即将表的长度置为0
L->length = 0;
}
求表长int ListLength(SeqList *L)
{
return L->legth;//返回length
}
取表中第i个结点
DataType GetElem(L, i )
{
if (i<1 || i > L->length -1)
Error("position error");
return L-> data[i-1];
}
最重要的是插入和删除操作:
1.插入:
线性表的插入运算是指在表的第i(1≤i≤n+1)个位置上,插入一个新结点x,使长度为n的线性表:
(a1,…,ai-1,ai,…an)
变成长度为n+1的线性表:
(a1,…,ai-1,x,ai,…an)
注意:
① 由于向量空间大小在声明时确定,当L->length≥ListSize时,表空间已满,不可再做插入操作
② 当插入位置i的值为i>n或i<1时为非法位置,不可做正常插入操作
顺序表插入操作过程
在顺序表中,结点的物理顺序必须和结点的逻辑顺序保持一致,因此必须将表中位置为n ,n-1,…,i上的结点,依次后移到位置n+1,n,…,i+1上,空出第i个位置,然后在该位置上插入新结点x。仅当插入位置i=n+1时,才无须移动结点,直接将x插入表的末尾。
具体算法描述:
void InsertList(SeqList *L,DataType x, int i)
{//在第i个结点插入元素x
int j;
if (i < 1 || i> L->length)
Error("position error");
if( L->length >= ListSize )
Error("overflow");
for( j = L ->length; j>=i-1; j--) {
L->data[ j+1] = L->data[ j ];
}
L->data[i] = x;
L-> length++;
}
算法分析:
1.问题的规模: 表的长度L->length(设为n)是问题的规模
2.移动结点的次数由表长n和插入位置决定
算法的时间主要花费在for循环中的结点后移语句上,该语句的执行次数是n-i +1;
当i= n+1:移动结点次数为0,即算法在最好时间复杂度O(1);
当i = 1;移动节点次数为n,即算法在最坏情况下时间复杂度是O(n)(一般我们所说的时间复杂度都是指最坏时间复杂度)
在顺序表上进行插入运算,平均要移动一半结点。
删除
1.删除运算的逻辑描述
线性表的删除运算是指将表的第i(1≤i≤n)个结点删去,使长度为n的线性表
(a1,…,ai-1,ai,ai+1,…,an)
变成长度为n-1的线性表
(a1,…,ai-1,ai+1,…,an)
注意:
当要删除元素的位置i不在表长范围(即i<1或i>L->length)时,为非法位置,不能做正常的删除操作
2.顺序表删除操作过程
在顺序表上实现删除运算必须移动结点,才能反映出结点间的逻辑关系的变化。若i=n,则只要简单地删除终端结点,无须移动结点;若1≤i≤n-1,则必须将表中位置i+1,i+2,…,n的结点,依次前移到位置i,i+1,…,n-1上,以填补删除操作造成的空缺.
3.具体算法描述
void DeleteList(SeqList *L,int i)
{//从L所指的顺序表中删除第i个结点ai
int j;
if(i<1||i>L->length)
Error("position error"); //非法位置
for(j=i;j<=L->length-1;j++)
L->data[j-1]=L->data[j]; //结点前移
L->length--; //表长减小
}
4.算法分析
①结点的移动次数由表长n和位置i决定:
i=n时,结点的移动次数为0,即为0(1)
i=1时,结点的移动次数为n-1,算法时间复杂度分别是0(n)
顺序表上做删除运算,平均要移动表中约一半的结点,平均时间复杂度也是0(n)。
- 数据结构之线性结构(顺序表)【一】
- 数据结构线性表(一)之顺序存储结构思路
- 进击的数据结构一之线性表的顺序结构
- 线性表数据结构解读(一)顺序存储结构ArrayList
- 数据结构(3)之线性表之顺序存储结构
- 数据结构之旅(一)顺序存储结构来实现线性表
- 数据结构之线性表--顺序结构测试
- 数据结构:线性表之顺序存储结构
- 数据结构-线性表之顺序存储结构
- 【数据结构】线性表之顺序存储结构
- 数据结构之顺序存储结构线性表
- 数据结构:线性表之顺序存储结构
- 数据结构之线性结构(一,表结构)
- 数据结构之线性结构(一,表结构)
- 数据结构:线性表(顺序存储结构)
- 数据结构(一):线性表的顺序存储结构-顺序表的实现
- 数据结构一 线性表的顺序存储结构
- 大话数据结构一:线性表的顺序存储结构
- Cannot open source file: 'C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\APPMODUL.CPP': No su
- CSS打造导航菜单
- CentOS6 sudo: (whatever): command not found
- C++/STL/VC资源链接(查找方便)
- clear方法和margin/padding在IE6的兼容性问题
- 数据结构之线性结构(顺序表)【一】
- SQL IN
- 网址前面加小图标的方法
- ZOJ 1091 Knight Moves (BFS)
- JFace - 分析TableViewer的设计
- Howto - Cross Compiling in Linux using MingW32
- [软件人生]技术发展中的迷茫与规划分析建议
- java强制类型转换要小心!
- iOS 将应用与文件关联起来