数据结构 第二章(学习笔记一(顺序表))

线性表之顺序存储

线性表
线性表(linear list)是最基本、最简单、也是最常用的一种数据结构。线性表是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
线性表是具有相同特征的数据元素的一个有限序列。

线性表由n(n>=0)个数据元素(结点)a1,a2,…,an组成的有限序列
线性表中元素的个数n(n≥0)称为线性表的长度,n=0时称为空表。
对于非空的线性表或线性结构,特点为:
1.存在唯一的一个被称作"第一个"的数据元素;
2.存在唯一的一个被称作"最后一个"的数据元素;
3.除第一个之外,结构中的每个数据元素均只有一个前驱;
4.除最后一个之外,结构中的每个数据元素均只有一个后继。
此图更直观的描述它们之间的关系:
在这里插入图片描述
类型定义
抽象数据类型线性表的定义如下:
在这里插入图片描述
基本操作:
InitList(&L) (Initialization List)初始
//构造一个空的线性表L

DestroyList(&L) 销毁
//销毁线性表L

ClearList(&L) 清空
//将线性表L重置为空表

ListEmpty(L)
//判断线性表L是否为空表,若为空表则返回TURE;否则返回FALSE

ListLength(L) 计算长度
//返回线性表L中的数据元素个数

GetElem(L,i,&e) 获取元素
//条件:1< = i < = ListLength(L)
//用e返回线性表L中第i个数据元素的值

LocateElem(L,e)
//返回L中第1个值与e相同的元素在L中的位置。若这样的元素不存在,则返回值为0

PriorElem(L,cue_e,&pre_e) 求前驱
//若cur_e是L的数据元素,且不是第一个,则用pre_e返回他的前趋;否则操作失败,pre_e无意义

NextElem(L,cur_e,&next_e) 求后继
//若cur_e是L的数据元素,且不是最后一个,则用next_e返回他的后继;否则操作失败,next_e无意义

ListInsert(&L,i,e) 插入元素
//在第L的第i个位置之前插入新的数据元素e,L的长度加一

ListDelete(&L,i) 删除元素
//删除L的第i个数据元素,L的长度减一

ListTraverse(L) 遍历
//对线性表L进行遍历,在遍历过程中对L的每个结点访问一次

线性表的顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

线性表的顺序存储
线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。

逻辑位序和物理位序相差1

线性表顺序存储结构占用一片连续的存储结构。知道某个元素的存储位置就可以知道其他元素的存储位置,所以线性表的顺序存储结构是一种随机存取的存储结构。
假设线性表的每个元素占 l 个存储单元,则第 l+1个数据元素的存储位置和第i个数据元素的存储位置之间满足关系:
LOC(ai+1)= LOC(ai)+ l
由此,所有数据元素的存储位置均可由第一个数据元素的存储位置得到:
LOC(ai+1)= LOC(ai)+(i-1) * l

C语言中:
数组静态内存分配

#define MAXSIZE 100  //线性表存储空间的初始分配量
typedef struct {
   
	ElemType elem[MAXSIZE];
	int length;             //当前长度
}SqList;                    //顺序表类型

数组动态内存分配

#define  MAXSIZE 100       //线性表存储空间的初始分配量
typedef  struct{
   
  ElemType *elem;           //存储空间的基地址
  int length;               //当前长度
}SqList;                    //顺序表类型

C++实现顺序表基本操作

#include<stdio.h>
#include<iostream>

using namespace std;

//函数结果状态代码
#define TRUE   1
#define FALSE  0
#define OK     1
#define ERROR  0
#define INFEASIBLE -1
#define OVERFLOW   -2
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status;    // Status 相当于 int 
typedef char ElemType; //Elemtype 相当于 char 
#define  MAXSIZE  100       //线性表存储空间的初始分配量
typedef  struct {
   
	ElemType* elem;           //存储空间的基地址
	int length;               //当前长度
}SqList;                    //顺序表类型名称为Sqlist 

Status InitL
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值