数据结构与算法 --顺序表的创建

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

1.

顺序表(Sequence List)是一种线性表的实现方式,通过连续的内存空间存储元素,按照顺序排列。

顺序表的特点包括:

  • 元素在内存中的存储是连续的,通过数组实现。
  • 元素之间的逻辑顺序与物理顺序一致。
  • 可以根据元素的索引直接访问和修改元素。
  • 需要预先分配足够的内存空间,容量固定。

顺序表常见的操作包括:

  • 创建:通过动态内存分配,创建一个具有指定容量的顺序表。
  • 销毁:释放顺序表占用的内存空间。
  • 清空:将顺序表中的元素清空,使其为空表。
  • 插入:在指定位置插入一个元素,后面的元素依次后移。
  • 删除:删除指定位置的元素,后面的元素依次前移。
  • 访问:根据索引访问指定位置的元素。
  • 查询:根据元素的值查找元素在顺序表中的位置。
  • 修改:根据索引修改指定位置的元素的值。
  • 排序:对顺序表中的元素进行排序,常用的算法有冒泡排序、插入排序、快速排序等。
  • 遍历:按照顺序依次访问顺序表中的元素。

优点:

随机访问效率高,可以直接通过索引定位元素,不需要遍历,不容易产生内存碎片

缺点:

插入和删除操作需要移动大量元素,效率较低,并且容量固定,无法动态扩容。

另外注意的是,在使用顺序表时,需要进行边界检查,避免越界访问。此外,插入和删除元素时需要注意维护顺序表的逻辑和物理顺序一致性。

代码实现

设计顺序表结构

//	设计顺序表结构
typedef struct Array
{
	TYPE* ptr;		//	存储元素的内存首地址
	size_t cal;		//	表的容量
	size_t cnt;		//	元素的数量
}Array;

创建

//	创建
Array* create_array(size_t cal)
{
	Array* arr = malloc(sizeof(Array));   //	给顺序表结构分配内存 

	arr->ptr = malloc(sizeof(TYPE)*cal);    //	给数据元素分配内存
	
	arr->cal = cal;        //	给数据元素分配内存

	arr->cnt = 0;        //	初始化元素的数量

	return arr;
}

销毁


//	销毁
void destroy_array(Array* arr)
{
	free(arr->ptr);
	free(arr);
}

清空


//	销毁
void destroy_array(Array* arr)
{
	free(arr->ptr);
	free(arr);
}

插入

//	插入
bool insert_array(Array* arr,size_t index,TYPE data)
{
	//	判断表是否满
	if(arr->cnt >= arr->cal)	return false;
	//	判断下标是否能保持元素的连续性
	if(index > arr->cnt) return false;


	//	数据向后移动
	for(int i=arr->cnt; i>index; i--)
	{
		arr->ptr[i] = arr->ptr[i-1];	
	}

	//	插入数据
	arr->ptr[index] = data;
	arr->cnt++;
	return true;
}

删除

//	删除
bool delete_array(Array* arr,size_t index)
{
	if(index >= arr->cnt) return false;   //判断表是否满
	
	for(int i=index; i<arr->cnt-1; i++)
	{
		arr->ptr[i] = arr->ptr[i+1];
	}
	
	arr->cnt--;
	return true;
}

访问

//	访问
bool access_array(Array* arr,size_t index,TYPE* data)
{
	if(index >= arr->cnt) return false;
	*data = arr->ptr[index];
	return true;
}

查询

//	查询
int query_array(Array* arr,TYPE data)
{
	for(int i=0; i<arr->cnt; i++)
		if(arr->ptr[i] == data) return i;
	return -1;
}

修改

//	修改
bool modify_array(Array* arr,size_t index,TYPE data)
{
	if(index >= arr->cnt) return false;
	arr->ptr[index] = data;
	return true;
}

排序

//	排序
void sort_array(Array* arr)
{
	for(int i=0; i<arr->cnt-1; i++)
	{
		for(int j=i+1; j<arr->cnt; j++)	
		{
			if(arr->ptr[j] < arr->ptr[i])
			{
				TYPE temp = arr->ptr[j];
				arr->ptr[j] = arr->ptr[i];
				arr->ptr[i] = temp;
			}
		}
	}
}

遍历

//	遍历
void show_array(Array* arr)
{
	for(int i=0; i<arr->cnt; i++)
	{
		printf(PH,arr->ptr[i]);	
	}
	printf("\n");
}

完整代码文章来源地址https://www.toymoban.com/news/detail-843469.html

  1. #include <stdio.h>
    #include <stdbool.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define TYPE int
    #define PH "%d "
    
    //	设计顺序表结构
    typedef struct Array
    {
    	TYPE* ptr;		//	存储元素的内存首地址
    	size_t cal;		//	表的容量
    	size_t cnt;		//	元素的数量
    }Array;
    
    //	创建
    Array* create_array(size_t cal)
    {
    	//	给顺序表结构分配内存
    	Array* arr = malloc(sizeof(Array));
    	//	给数据元素分配内存
    	arr->ptr = malloc(sizeof(TYPE)*cal);
    	//	记录表的容量
    	arr->cal = cal;
    	//	初始化元素的数量
    	arr->cnt = 0;
    
    	return arr;
    }
    
    //	销毁
    void destroy_array(Array* arr)
    {
    	free(arr->ptr);
    	free(arr);
    }
    //	清空
    void clear_array(Array* arr)
    {
    	arr->cnt = 0;	
    }
    
    //	插入
    bool insert_array(Array* arr,size_t index,TYPE data)
    {
    	//	判断表是否满
    	if(arr->cnt >= arr->cal)	return false;
    	//	判断下标是否能保持元素的连续性
    	if(index > arr->cnt) return false;
    
    	//	数据向后移动
    	for(int i=arr->cnt; i>index; i--)
    	{
    		arr->ptr[i] = arr->ptr[i-1];	
    	}
    
    
    	//	插入数据
    	arr->ptr[index] = data;
    	arr->cnt++;
    	return true;
    }
    
    //	删除
    bool delete_array(Array* arr,size_t index)
    {
    	if(index >= arr->cnt) return false;
    	
    	for(int i=index; i<arr->cnt-1; i++)
    	{
    		arr->ptr[i] = arr->ptr[i+1];
    	}
    	
    	arr->cnt--;
    	return true;
    }
    
    //	访问
    bool access_array(Array* arr,size_t index,TYPE* data)
    {
    	if(index >= arr->cnt) return false;
    	*data = arr->ptr[index];
    	return true;
    }
    
    //	查询
    int query_array(Array* arr,TYPE data)
    {
    	for(int i=0; i<arr->cnt; i++)
    		if(arr->ptr[i] == data) return i;
    	return -1;
    }
    //	修改
    bool modify_array(Array* arr,size_t index,TYPE data)
    {
    	if(index >= arr->cnt) return false;
    	arr->ptr[index] = data;
    	return true;
    }
    
    //	排序
    void sort_array(Array* arr)
    {
    	for(int i=0; i<arr->cnt-1; i++)
    	{
    		for(int j=i+1; j<arr->cnt; j++)	
    		{
    			if(arr->ptr[j] < arr->ptr[i])
    			{
    				TYPE temp = arr->ptr[j];
    				arr->ptr[j] = arr->ptr[i];
    				arr->ptr[i] = temp;
    			}
    		}
    	}
    }
    
    //	遍历
    void show_array(Array* arr)
    {
    	for(int i=0; i<arr->cnt; i++)
    	{
    		printf(PH,arr->ptr[i]);	
    	}
    	printf("\n");
    }
    
    int main(int argc,const char* argv[])
    {
    	Array* arr = create_array(10);	
    
    	for(int i=0; i<5; i++)
    	{
    		insert_array(arr,0,i+1);	
    	}
    
    	insert_array(arr,1,8);	
    	delete_array(arr,5);
    	show_array(arr);
    
    	int num = 0;
    	if(access_array(arr,5,&num))
    		printf("num=%d\n",num);
    	else
    		printf("index error\n");
    	
    	printf("index=%d\n",query_array(arr,80));
    
    	sort_array(arr);
    	clear_array(arr);
    	show_array(arr);
    	destroy_array(arr);
    
    }
    

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

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

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

相关文章

  • 【数据结构】--顺序表的实现

    什么是顺序表?顺序表(SeqList)是线性表中的一类。而线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、字符串、栈、队列... 注意:线性表在逻辑上是线性结构,也就是说是一条连续的直线。但在

    2024年04月17日
    浏览(22)
  • 数据结构--顺序表的查找

    目标: GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。 代码实现 时间复杂度 O(1) 由于顺序表的各个数据元素在内存中连续存放,因此可以根据起始地址和数据元素大小立即找到第i个元素——“随机存取”特性 目标: LocateElem(Le):按值查找操作。在表L中查找具有给

    2024年02月11日
    浏览(31)
  • 数据结构:顺序表的奥秘

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

    2024年03月10日
    浏览(28)
  • 【数据结构】顺序表的学习

    前言:在之前我们学习了C语言的各种各样的语法,因此我们今天开始学习数据结构这一个模块,因此我们就从第一个部分来开始学习\\\" 顺序表 \\\"。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关注博主和博主一起学

    2024年02月05日
    浏览(24)
  • 头歌(C语言)-数据结构与算法-队列-第1关:实现一个顺序存储的队列

    任务描述 相关知识 顺序存储的队列 顺序队列的主要操作 编程要求 测试说明 任务描述 本关任务:实现 step1/SeqQueue.cpp 中的 SQ_IsEmpty 、 SQ_IsFull 、 SQ_Length 、 SQ_In 和 SQ_Out 五个操作函数,以实现判断队列是否为空、是否为满、求队列长度、队列元素入队和出队等功能。 相关知

    2024年02月06日
    浏览(80)
  • 数据结构(六)——线性表的顺序实现

    🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉 在csdn获奖荣誉: 🏆csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓csdn2023年后端赛道第第七 ⁣⁣⁣⁣ ⁣⁣⁣⁣

    2024年01月25日
    浏览(32)
  • 【数据结构】顺序表的定义和运算

    目录 1.初始化 2.插入 3.删除 4.查找 5.修改 6.长度 7.遍历 8.完整代码 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以获得授权⚠️。 🎁欢迎大家给我点赞👍、收藏⭐️

    2024年02月05日
    浏览(20)
  • 【数据结构】顺序表的定义和操作

    目录 1.初始化 2.插入 3.删除 4.查找 5.修改 6.长度 7.遍历 8.完整代码 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以获得授权⚠️。 🎁欢迎大家给我点赞👍、收藏⭐️

    2024年02月03日
    浏览(25)
  • 【数据结构】顺序表的实现——静态分配

    🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:数据结构 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 在数据结构的领域中,顺序表是一种基础且重要的线性表实现方式。它采用一段地址连续的存储

    2024年04月26日
    浏览(21)
  • 数据结构1:动态顺序表的实现

    2024年04月13日
    浏览(22)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包