【数据结构——顺序表三种数据结构差异】

这篇具有很好参考价值的文章主要介绍了【数据结构——顺序表三种数据结构差异】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构——顺序表的三种数据结构

数据结构:就是数据之间的关系。
数据结构的关系:一对多,多对多,集合,网络

顺序表的三种数据结构

第一种顺序表数据结构

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//第一种设计方式
#define SEQSIZE 100 //定义一个宏,后面调用SEQSIZE都可以替换成100
typedef int ElemType;//将int重命名为ElemType

typedef struct
{
	ElemType data[SEQSIZE];
	int cursize;
}SeqList;

//初始化
void InitList(SeqList *list)
{
	list->cursize = 0;
}
bool push_back(SeqList *list,ElemType value)
{
	//检查顺序表是否已满
	if(list->cursize == SEQSIZE)
	{
		printf("顺序表已满");
		return false;
	}
	list->data[list->cursize]= value;
	list->cursize += 1;
	return true;
}
//销毁
void DestroyList(SeqList *list)
{
//其实可以不进行销毁,因为此时的数组是临时变量,当SeqList实例销毁,list也会被销毁
	list->cursize = 0;
}
int main()
{
	int value = 0;
	SeqList mylist;
	InitList(&mylist);
	for(int i = 0;i<10;i++)
	{
		push_back(&mylist,i);
	}
	DestroyList(&mylist);
}

第二种顺序表数据结构

#include <stdio.h>
#include<stdlib.h>

//第二种设计方式
#define SEQSIZE 100
#define INCSIZE 2 //顺序表空间不足时,每次增加的空间数量
typedef int ElemType;
typedef struct 
{
	ElemType* data;
	int cursize;//已存储的元素数量
	int maxsize;//能够存储的最大数量
}SeqList;
//初始化
void InitList(SeqList *list)
{
	list->data = (ElemType*)malloc(sizeof(ElemType)*(SEQSIZE));
	if (!list->data)
	{
		exit(EXIT_FAILURE);//如果分配失败则退出程序
	}
	list->cursize = 0;
	list->maxsize = SEQSIZE;
}
bool push_back(SeqList *list,ElemType value)
{
	if(list->cursize == list->maxsize)
	{
		printf("顺序表已满");
		return false;
	}
	list->data[list->cursize]=value;
	list->cursize ++;
	return true;
}
void DestroyList(SeqList *list)
{
	free(list->data);
	list->data = NULL;
	list->cursize =0;
	list->maxsize = 0;
}
int main()
{
	SeqList mylist;
	InitList(&mylist);
	for(int i = 0;i<10;i++)
	{
		push_back(&mylist,i);
	}
	DestroyList(&mylist);
}

第三种顺序表数据结构

//第三种设计方式
#include <stdio.h>
#include <stdlib.h>

#define SEQSIZE 100
#define INCSIZE 2
typedef int ElemType;
typedef struct
{
	ElemType* first;
	ElemType* last;
	ElemType* end;	
}SeqList;
void InitList(SeqList *list)
{
	list->first = (ElemType*)malloc(sizeof(ElemType)*SEQSIZE);
	if(!list->first)
	{
		exit(EXIT_FAILURE);
	}
	list->last = list->first;
	list->end = list->first + SEQSIZE;
}
bool push_back(SeqList *list,ElemType value)
{
	if(list->last == list->end)
	{
		printf("顺序表已满");
		return false;
	}
	*(list->last)=value;
	list->last ++;
	return true;
}
void DestroyList(SeqList *list)
{
	free(list->first);
	list->first = NULL;
	list->last = NULL;
	list->end = NULL;
}
int main()
{
	SeqList mylist;
	InitList(&mylist);
	for(int i = 0;i<10;i++)
	{
		push_back(&mylist,i);
	}
	 DestroyList(&mylist);
	 return 0}

顺序表的三种数据结构使用差异

初始化InitList、摧毁DestroyList、尾插法Push_back来比较三者差异。文章来源地址https://www.toymoban.com/news/detail-831757.html

数据结构 InitList
第一种 只需要定义cursize
第二种 需要动态申请内存,还需要定义cursize
第三种 需要动态申请内存,需要定义last、end指向
数据结构 DestroyList
第一种 因为是变量,当调用结束,结构体直接释放内存,只需要将cursize置为空。
第二种 动态生成的空间,需要free内存,并且需要将指针置为空(防止空悬指针)。
第三种 动态生成的空间,需要free内存,并且需要将指针置为空(防止空悬指针)。需要将其他指针置为空(可选)。
数据结构 Push_back
第一种 因为是数组,直接存在末尾位置,当前元素数量+1
第二种 动态生成空间可以看成存在当前末尾位置,当前元素数量+1
第三种 动态生成空间,数据存储在当前元素指针指向的最后一个位置,指针位置+1
数据结构 优点 缺点
第一种 便捷简单,不需要动态内存管理 申请空间多了,占内存;申请空间少了,放不下,不能动态扩容
第二种 可以扩容,扩容只需要更改maxsize的数量,相比较第三种更好管理 需要动态管理内存
第三种 可以扩容 扩容时first、last、end指针都需要更改,比较麻烦

到了这里,关于【数据结构——顺序表三种数据结构差异】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构与算法——顺序表(顺序存储结构)及初始化详解

    顺序表 ,全名 顺序存储结构 ,是线性表的一种。通过《什么是线性表》一节的学习我们知道,线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。 不仅如此,顺序表对数据的物理存储结构也有要求。 顺序表存储数据时,会提前申请一整块足够大小的物理

    2024年02月16日
    浏览(41)
  • 【数据结构】线性结构 之 顺序表

    🌱博客主页:大寄一场. 🌱系列专栏:数据结构与算法 😘博客制作不易欢迎各位👍点赞+⭐收藏+➕关注 目录 前言 顺序表概念及结构 静态代码实现: 动态代码实现: SeqList.h文件 SeqList.c文件 test.c文件 本章节博主将会带领大家了解数据结构的 线性结构的顺序表 。 提到线性

    2024年02月06日
    浏览(44)
  • 【数据结构】二叉树的顺序结构-堆

    普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而 完全二叉树 更适合使用顺序结构存储。 现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个

    2024年02月09日
    浏览(52)
  • 数据结构:二叉树的顺序结构--堆

    朋友们、伙计们,我们又见面了,本期来给大家解读一下二叉树--堆的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结构专栏:数据结构 个  人  主  页 :stackY、 目录 前言: 1.堆的概念及

    2024年02月06日
    浏览(46)
  • 数据结构-二叉树·堆(顺序结构的实现)

    🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🐻‍❄个人主页🎉:GOTXX 🐼个人WeChat : ILXOXVJE 🐼本文由GOTXX原创,首发CSDN🎉🎉🎉 🕊系列专栏:零基础学习C语言----- 数据结构的学习之路 🐓每日一句:如果没有特别幸运,那就请特别努力!🎉

    2024年02月05日
    浏览(46)
  • 数据结构---顺序表,链表

    目录 前言 线性表 线性表的概念 顺序表 顺序表的概念 顺序表的结构 接口实现 相关面试题分析 顺序表的问题及思考 链表 链表的概念及结构 链表的分类 单链表的实现  接口实现  链表面试题 双向链表 顺序表和链表的区别         这篇文章主要讲顺序表和链表,有几点需要

    2024年02月16日
    浏览(35)
  • [数据结构]顺序表

    线性表( linear list )是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的, 线性表在物理

    2024年02月19日
    浏览(21)
  • 数据结构之顺序表

           线性表是具有 相同 数据类型的n(n=0)个数据元素的 有限 序列      顺序表 ---用顺序存储的方式实现线性表。顺序存储---把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。      如何知道一个数据元素大小

    2024年02月16日
    浏览(19)
  • 数据结构:顺序表

    目录 一.顺序表 1.1概念以及结构 1.2动态顺序表实现 1.2.1文件创建: 1.2.2接口实现 1.顺序表打印 2.顺序表初始化 3.顺序表尾插 4.顺序表头插  5.顺序表尾删 6.顺序表头删  7.顺序表在pos位置插入x  8.顺序表删除pos位置的值  9.顺序表销毁 二.顺序表问题 顺序表(一般是用数组存储

    2024年02月04日
    浏览(13)
  • 数据结构·顺序表应用

            本节应用是要用顺序表实现一个通讯录,收录联系人的姓名、性别、电话号码、住址、年龄                         ​​​​​​​                 顺序表的实现在上一节中已经完成了,本节的任务其实就是应用上节写出来的代码的那些接口函数功

    2024年01月22日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包