IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构个人笔记 第二课 线性表 -> 正文阅读

[数据结构与算法]数据结构个人笔记 第二课 线性表

线性表

线性表,全名为线性存储结构。使用线性存储数据的方式可以这样理解,即“把所有数据用一根线串起来,在存储到物理空间中”。

线性表

顺序存储结构和链式存储结构

将数据一次存储在连续的整块物理空间中,这种存储结构成为顺序存储结构

数据分散的存储在物理空间中,通过一根线保存这他们之间的逻辑关系,这种存储结构成为链式存储结构

线性表的逻辑结构

  • 非空表中有且只有一个第一个元素
  • 非空表中有且只有一个最后一个元素
  • 除第一个元素之外,每个元素均有且仅有一个前趋
  • 除最后一个元素之外,每个元素均有且仅有一个后继

前趋和后继

某一元素的左侧相邻元素称为“直接前趋”,位于此元素左侧的所有元素都统称为“前趋元素

某一元素的右侧相邻元素称为“直接后继”,位于次元素右侧的所有元素都统称为“后继元素
前趋和后继

线性表基本运算

  1. 初始化initiate(L),建立一个空表
  2. 求表长length(L),返回元素个数
  3. 取第i个元素get(L,i),其中1 <= i <= length(L)
  4. 元素定位locate(L,e),返回元素的存储位置
  5. 插入元素insertion(L,i,e),其中1 <= i <= length(L)+1
  6. 删除元素deletion(L,i),其中1 <= i <= length(L)
  7. 判表空empty(L)
  8. 置表空clear(L),清空表
  9. 求前趋prior(L,e)
  10. 求后继next(L,e)

顺序表

顺序表,全名顺序存储结构,是线性表的一种。
顺序表用于存储逻辑关系为“一对一”的数据,不仅如此,顺序表对数据的物理存储结构也有要求。顺序表存储数据,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。
顺序表

顺序表的初始化

使用顺序表存储数据之前,除了要申请足够大小的物理空间之外,为了方便后期使用表中的数据,顺序表还需要实时记录以下2项数据:

  1. 顺序表申请的存储容量
  2. 顺序表的长度,也就是表中存储数据元素的个数

正常状态下,顺序表申请的存储容量要大于顺序表的长度

因此,在c语言中自定义顺序表:

typedef struct Table{
	int * head;//申明一个名为head的长度不确定的数组,也叫“动态数组”
	int length;//记录当前顺序表的长度
	int size;//记录顺序表分配的存储容量
}table;

这里的head是我们声明的一个未初始化的动态数组,不要只把他看做普通的指针

接下来开始顺序表的初始化,也就是初步建立一个顺序表。建立顺序表需要做如下工作:

  • 给head动态数据申请足够大小的物理空间
  • 给size和length赋初始值

因此,在c语言中初始化顺序表:

#define Size 5//对Size进行了宏定义,表示顺序表申请空间的大小
table initTable(){
	table t;
	t.head=(int*)malloc(Size*sizeof(int));//构造一个空的顺序表,动态申请存储空间
	if(!t.head){//如果申请失败,作出提示并直接退出程序
		printf("初始化失败");
		exit(0); 
	}
	t.length=0;//空表的长度初始化为0
	t.size=Size;//空表的初始存储空间为Size
	return t;
}

这样做之后,整个顺序表初始化的过程被封装到了一个函数中,此函数返回值是一个已经初始化完成的顺序表。这样做的好处是增加了代码的可用性,也更加美观。与此同时,顺序表初始化过程中,要注意对物理空间的申请进行判断,对申请失败的情况进行处理,这里只进行了“输出提示信息和强制退出”的操作,可以根据你自己的需要对代码中的if语句进行改进。

综合代码,这里还加了一点东西

#include<iostream>
#include<stdlib.h> 
#define Size 5
using namespace std;

typedef struct Tabel{
	int * head;
	int length;
	int size;
}table; 

table initTable(){
	table t;
	t.head=(int*)malloc(Size*sizeof(int));
	if(!t.head){
		printf("初始化失败");
		exit(0); 
	}
	t.length=0;
	t.size=Size;
	return t;
}

//输出顺序表中元素的函数
void displayTable(table t){
	for(int i = 0;i<t.length;i++){
		printf("%d ",t.head[i]);
	}
	printf("\n");
}

int main(){
	table t = initTable();
	for(int i = 1;i<= Size;i++){
		t.head[i-1]=i;
		t.length++;
	}
	printf("顺序表中存储的元素分别是: \n");
	displayTable(t);
	return 0;
} 
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:44:55  更:2021-08-01 14:46:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:11:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计