[C语言][数据结构][动态内存空间的开辟]顺序表的实现!

这篇具有很好参考价值的文章主要介绍了[C语言][数据结构][动态内存空间的开辟]顺序表的实现!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

零.必备知识

a.顺序表的底层是数组.

b.数组在内存中是连续存放的.

c.动态内存空间的开辟(malloc,calloc,realloc).

一.顺序表的定义与实现 

        1.1 顺序表的定义 

        1.2 顺序表的初始化 

        1.3 顺序表的销毁 

        1.4 顺序表容量的检查与调整(最关键的部分)

        1.5 顺序表的尾插

        1.6 顺序表的头插 

        1.7 顺序表的尾删

        1.8 顺序表的头删

         1.9 顺序表中在指定位置之前插入数据

        1.10 删除指定位置的数据 

        1.11 顺序表中查找指定数据

二.顺序表源码 

        SeqList.h

        SeqList.c

 


零.必备知识


a.顺序表的底层是数组.

b.数组在内存中是连续存放的.

c.动态内存空间的开辟(malloc,calloc,realloc).

一.顺序表的定义与实现 

注:具体解释都在注释中(在代码中具体分析!)

        1.1 顺序表的定义 

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

        1.2 顺序表的初始化 

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

        1.3 顺序表的销毁 

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

        1.4 顺序表容量的检查与调整(最关键的部分)

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法 

        1.5 顺序表的尾插

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

 [C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

        1.6 顺序表的头插 

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法 

        1.7 顺序表的尾删

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法 

        1.8 顺序表的头删

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

 [C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

         1.9 顺序表中在指定位置之前插入数据

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法 

        1.10 删除指定位置的数据 

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法 

        1.11 顺序表中查找指定数据

 [C语言][数据结构][动态内存空间的开辟]顺序表的实现!,C语言阶段相关习题总览,c语言,数据结构,开发语言,算法文章来源地址https://www.toymoban.com/news/detail-844849.html

二.顺序表源码 

        SeqList.h

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
 静态顺序表
//struct SeqList
//{
//	int arr[100];
//	int size;
//};

// 动态顺序表的定义
typedef int DateType; //数据类型
typedef struct SeqList
{
	DateType* arr;
	int size; //数组中的有效元素个数
	int capacity; //数组的总容量
}SL;

// 顺序表的初始化
void SLInit(SL* psl);
// 顺序表的销毁
void SLDestroy(SL* psl);
// 打印检查
void SLprint(SL sl);
// 容量检查与调整
void CheckCapacity(SL* psl);
// 尾插-头插
void SLPushBack(SL* psl, DateType x);
void SLPushFront(SL* psl, DateType x);
// 尾删-头删
void SLPopBack(SL* psl);
void SLPopFront(SL* psl);
// 在指定位置之前插入数据
void SLInsert(SL* psl, int pos, DateType x); //pos:点
// 删除指定位置的数据
void SLErase(SL* psl, int pos);
// 顺序表的查找
void SLFind(SL psl, DateType x);

        SeqList.c

 

#define  _CRT_SECURE_NO_WARNINGS
#include "SeqList.h"
// 顺序表的初始化
void SLInit(SL* psl)
{
	psl->arr = NULL;
	psl->size = psl->capacity = 0;
}
// 顺序表的销毁
void SLDestroy(SL* psl)
{
	if (psl->arr)
	{
		free(psl->arr); //释放动态开辟的内存空间
	}
	psl->arr = NULL;
	psl->size = psl->capacity = 0;
}
// 容量检查与调整
void CheckCapacity(SL* psl)
{
	if (psl->size == psl->capacity) //空间不够了,需要进行扩容
	{
		int newCapacity = psl->capacity == 0 ? 4 : psl->capacity * 2; //避免 psl->capacity初始容量为空
		DateType* temp = (DateType*)realloc(psl->arr, newCapacity * sizeof(DateType));
		if (temp == NULL) //避免因为realloc调整空间失败,而导致psl->arr中的数据被清除
		{
			perror("realloc fail!");
			exit(1);
		}
		psl->capacity = newCapacity;
		psl->arr = temp;
	}
}
// 尾插
void SLPushBack(SL* psl, DateType x)
{
	CheckCapacity(psl);
	// 插入
	psl->arr[psl->size] = x;
	psl->size++;
}
// 头插
void SLPushFront(SL* psl, DateType x)
{
	CheckCapacity(psl);
	for (int i = psl->size; i > 0; i--)
	{
		psl->arr[i] = psl->arr[i - 1]; //psl->arr[1] = psl->arr[0]
	}
	psl->arr[0] = x;
	(psl->size)++;
}

// 尾删
void SLPopBack(SL* psl)
{
	assert(psl);
	assert(psl->size); //判断是否为空
	(psl->size)--;
}
// 头删
void SLPopFront(SL* psl)
{
	assert(psl);
	assert(psl->size); //判断是否为空
	for (int i = 0; i < psl->size - 1; i++)
	{
		psl->arr[i] = psl->arr[i + 1]; //psl->arr[psl->size - 1] = psl->arr[psl->size - 2]
	}
	(psl->size)--;
}

// 在指定位置之前插入数据
void SLInsert(SL* psl, int pos, DateType x)
{
	assert(psl);
	assert(pos >= 0 && pos <= psl->size);
	CheckCapacity(psl);
	for (int i = psl->size; i > pos; i--)
	{
		psl->arr[i] = psl->arr[i - 1]; //arr[pos + 1] = arr[pos]
	}
	psl->arr[pos] = x;
	psl->size++;
}
// 删除指定位置的数据
void SLErase(SL* psl, int pos)
{
	assert(psl);
	assert(psl->size != 0);
	assert(pos >= 0 && pos < psl->size);
	for (int i = pos; i < psl->size - 1; i++)
	{
		psl->arr[i] = psl->arr[i + 1]; //arr[i - 2] = arr[i - 1]
	}
	psl->size--;
}
// 顺序表的查找
void SLFind(SL* psl, DateType x)
{
	assert(psl);
	assert(psl->size != 0);
	for (int i = 0; i < psl->size; i++)
	{
		if (psl->arr[i] == x)
		{
			printf("找到了! 下标是%d\n", i);
			return;
		}
	}
	printf("找不到!\n");
}


// 打印
void SLprint(SL sl)
{
	for (int i = 0; i < sl.size; i++)
	{
		printf("%d ", sl.arr[i]);
	}
	printf("\n");
}

到了这里,关于[C语言][数据结构][动态内存空间的开辟]顺序表的实现!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C语言数据结构一:动态数组

    先说一个概念:数组是一段 连续 的内存空间。存储相同的数据类型。 数组的两个关键点: 连续内存; 相同类型。 首先连续内存:所以为了找到动态数组我们必须找到一个 首元素 地址。(内存 首地址 。) 如果不知道首地址,那无法找到并操作内存空间。 知道首地址了,

    2024年02月06日
    浏览(43)
  • 初阶数据结构之---导论,算法时间复杂度和空间复杂度(C语言)

    数据结构其实也学了挺长时间了,说着是要刷题所以才没怎么去写关于数据结构方面的内容。数据结构作为计算机中及其重要的一环,如果不趁着假期系统整理一下着实可惜,我这里构想的是将初阶数据结构和高阶数据结构,分别分成两个部分,初阶数据结构呢,大概有以下

    2024年02月22日
    浏览(57)
  • C++动态内存开辟与释放new和delete

    🐶博主主页: @ᰔᩚ. 一怀明月ꦿ  ❤️‍🔥 专栏系列: 线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,数据结构 🔥 座右铭: “不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

    2024年02月03日
    浏览(47)
  • 玩转动态内存管理以及程序内存开辟——【C语言】

    在之前我们学习过一些内存开辟的方法,比如用int float double等等,还有各种类型的数组。这些都可以开辟内存空间。但是它们所开辟的空间都是死的,开辟完之后就不能随意去更改了,非常的不方便。今天我们要学习一些新的开辟内存的方法——动态内存开辟   目录 1. 为什

    2024年02月14日
    浏览(38)
  • 追梦之旅【数据结构篇】——详解C语言动态实现顺序表

        😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主! 😘博主小留言:哈喽! 😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不

    2024年01月24日
    浏览(41)
  • 追梦之旅【数据结构篇】——详解C语言动态实现带头结点的双向循环链表结构

        😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主! 😘博主小留言:哈喽! 😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不

    2024年01月17日
    浏览(61)
  • 『初阶数据结构 • C语言』⑧ - 动态顺序表详解(附完整源码)

    本章内容 写在前面 1.静态与动态是指什么? 2.动态顺序表结构的定义 3.动态顺序表的函数接口实现 4.动态顺序表的问题及思考 5.关于顺序表的OJ题 6.OJ答案及解析 1.移除元素 2.删除有序数组中的重复项 ​3.合并两个有序数组 7.动态顺序表完整源码 1.SeqList.h 2.SeqList.c     上一章

    2024年02月16日
    浏览(44)
  • C语言数据结构-----顺序表(多功能动态顺序表的代码实现)

    本篇讲述了顺序表的相关知识,以及动态顺序表的代码实现。 顺序表和链表一般情况下都会叫他们线性表。 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性

    2024年02月07日
    浏览(48)
  • 数据结构(C语言实现)——栈和队列的介绍及基本操作的实现(动态顺序栈+链队)

    今天我们来学习另外两个线性结构——栈和队列,栈和队列是操作受限的线性表,因此,可称为限定性的数据结构。 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守

    2023年04月19日
    浏览(43)
  • 数据结构——空间复杂度

    3.空间复杂度 空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。 空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进

    2024年02月13日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包