数据结构-栈的实现(C语言版)

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

前言

        栈是一种特殊的线性表,只允许在固定的一端进行插入和删除的操作,进行数据插入和删除的一端叫做栈顶,另一端叫做栈底。 栈中的数据元素遵循后进先出的的原则。

目录

1.压栈和出栈

2. 栈的实现

3.测试代码


1.压栈和出栈

        压栈:栈的插入操作叫 压栈,入数据在栈顶。

        弹栈:栈的删除操作叫做出栈。出数据也在栈顶。

        如图:数据结构-栈的实现(C语言版),数据结构

 

2. 栈的实现

         //stack.h

#include<stdlib.h>
#include<assert.h>
#include<stdio.h>
#include<stdbool.h>
typedef int SDataType;
typedef struct Stack
{
	SDataType* _a;
	int _top;//栈顶数据
	int _capacity;//容量
}Stack;
void StackInit(Stack* st);//初始化栈
void StackDestory(Stack* st);//销毁栈
void StackPush(Stack* st, SDataType data);//入栈
void StackPop(Stack* st);//出栈

size_t StackSize(Stack* st);//获取栈中元素的数目

SDataType StackTop(Stack* st);//获取栈顶元素

bool StackEmpty(Stack* st);//判断栈是否为空

//stack.c文章来源地址https://www.toymoban.com/news/detail-646467.html

void StackInit(Stack* st)//初始化栈
{
	st->_a = (SDataType*)malloc(sizeof(SDataType) * 4);
	//申请空间
	//初始化数据
	st->_capacity = 4;
	st->_top = 0;
}
void StackDestory(Stack* st)//销毁栈
{
	free(st->_a);//释放空间
	st->_capacity = st->_top = 0;
}
void StackPush(Stack* st, SDataType data)//入栈
{
	assert(st);//判断指针是否存在

	if (st->_capacity == st->_top)
	{
		//空间满了需要增容
		st->_capacity *= 2;
		SDataType* p = (SDataType *)realloc(st->_a, st->_capacity * sizeof(SDataType));
		if (p == NULL)
		{
			printf("内存不足\n");
			exit(-1);
		}
		st->_a = p;
	}
	st->_a[st->_top] = data;
	++(st->_top);
}
void StackPop(Stack* st)//出栈
{
	assert(st);//确保指针存在
	assert(st->_top > 0);
	--(st->_top);
}
size_t StackSize(Stack* st)//获取栈中元素的数目
{
	assert(st);//确保指针存在
	size_t size = 0;
	return size = st->_top;
}
SDataType StackTop(Stack* st)//获取栈顶元素
{
	return st->_a[(st->_top) -1 ];
}
bool StackEmpty(Stack* st)//判断栈是否为空
{
	return !st->_top;
}

3.测试代码

void TestStack()
{
	Stack st;
	StackInit(&st);
	StackPush(&st, 1);
	StackPush(&st, 2);
	StackPush(&st, 3);
	StackPush(&st, 4);
	StackPush(&st, 5);
	StackPush(&st, 6);
	StackPush(&st, 7);
	StackPush(&st, 8);
	while (!StackEmpty(&st))
	{
		printf("%d ", StackTop(&st));
		StackPop(&st);
	}
	StackDestory(&st);
}

到了这里,关于数据结构-栈的实现(C语言版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【数据结构】链栈的基本操作(C语言)

    零零总总搜索了一些关于链栈的资料,了解了链栈的基本操作,一直觉得别人写的代码或多或少存在一些问题,所以打算自己写一篇关于链栈的文章,也算是对所学知识的梳理和巩固了。 首先说明本文使用C语言进行链栈的基本操作,链栈是无头结点的。这里补充说明一下,

    2024年02月05日
    浏览(15)
  • 【数据结构】 链栈的基本操作 (C语言版)

    【数据结构】 链栈的基本操作 (C语言版)

    目录 一、链栈 1、链栈的定义: 2、链栈的优缺点: 二、链栈的基本操作算法(C语言)     1、宏定义   2、创建结构体 3、链栈的初始化   4、链栈的进栈 5、链栈的出栈 6、获取栈顶元素 7、栈的遍历输出 8、链栈的判空  9、求链栈的栈长 10、链栈的清空 11、链栈的销毁

    2024年01月24日
    浏览(13)
  • 【数据结构 迷宫问题求解】栈的应用|c语言|迷宫问题

    【数据结构 迷宫问题求解】栈的应用|c语言|迷宫问题

    亲测可行: 使用蓝桥杯比赛编译器:DEV C++  求迷宫中从入口到出口的路径是一个经典的程序设计问题,通常采用“穷举求解”的方法,即顺着某一方向向前探索,若能走通,则继续往前走;否则原路返回,换一个方向继续探索,直至所有可能的通路都探索到为止。 因此,在

    2024年02月08日
    浏览(10)
  • 【数据结构】 顺序栈的基本操作 (C语言版)

    【数据结构】 顺序栈的基本操作 (C语言版)

    目录 一、顺序栈 1、顺序栈的定义: 2、顺序栈的优缺点 二、顺序栈的基本操作算法(C语言)    1、宏定义  2、创建结构体 3、顺序栈的初始化  4、顺序栈的入栈 5、顺序栈的出栈 6、取栈顶元素 7、栈的遍历输出 8、顺序栈的判空 9、顺序栈的判满  10、求顺序栈长度 11、顺

    2024年01月24日
    浏览(14)
  • 数据结构学习——C语言对栈的基本操作

    数据结构学习——C语言对栈的基本操作

             栈(Stack)是一种常用的数据结构,遵循先进后出(LIFO)的原则,对表尾进行操作,常用于临时存储和撤销等操作,其基本操作包括栈的创建、入栈(也叫压栈Push)、出栈(又称弹栈)、栈的遍历、栈的清空(clear)、栈的销毁(destroy)等。         栈的创建有两种方式,一种是通

    2024年02月07日
    浏览(18)
  • 数据结构:栈的概念及栈的实现

    数据结构:栈的概念及栈的实现

    目录 1.栈的概念及结构 2.栈的实现  2.1  初始化栈 2.2 入栈  2.3 出栈  2.4 获取栈顶元素 2.5 获取栈中有效元素个数   2.6  检测栈是否为空,如果为空返回非零结果,如果不为空返回0 2.7 销毁栈  3. 完整代码 test.c  Stack.h Stack.c   栈(后进先出,先进后出) : 一种 特殊

    2024年02月01日
    浏览(11)
  • 数据结构 栈的概念及栈的实现

    数据结构 栈的概念及栈的实现

    目录 1.栈的概念及结构 2.栈的实现  2.1  初始化栈 2.2 入栈  2.3 出栈  2.4 获取栈顶元素 2.5 获取栈中有效元素个数   2.6  检测栈是否为空,如果为空返回非零结果,如果不为空返回0 2.7 销毁栈  3. 完整代码 test.c  Stack.h Stack.c   栈(后进先出,先进后出) : 一种 特殊

    2024年01月21日
    浏览(9)
  • 【数据结构】:栈的实现

    【数据结构】:栈的实现

    栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶 出栈:栈的删除操作叫做

    2024年02月07日
    浏览(10)
  • 【数据结构】栈的实现

    【数据结构】栈的实现

    栈:是一种受限制的线性表,即只能在尾部进行插入、删除的线性表,而且是一种先进后出的数据结构。尾部这一端又叫做栈顶,另一端叫做栈底。 入栈:向一个栈内插入元素叫做入栈或压栈,它把新元素放到栈顶元素的上面,是它成为新的栈顶元素。 出栈:在栈内删除元

    2024年02月01日
    浏览(9)
  • 数据结构-栈的实现

    数据结构-栈的实现

    栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的 一端称为栈顶,另一端称为栈底 。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈, 入数据在栈顶。 出栈:栈的删除操

    2024年02月05日
    浏览(13)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包