C语言数据结构——栈和队列的实现

前言

本文章主要是为下一篇的在线OJ题目做铺垫,因为仅仅用c语言做栈与队列的OJ题时需要自己造轮子,也就是自己编写栈或者队列的前提下完成题目代码的编写。

栈(FILO先进后出)的实现主要是用动态数组的形式构建,先进先出用数组再方便不过,只需要记录下标的值,初始为零,每次入栈加数据,下标加一,出栈的时候只需要将下标减一所对应的内容取出即可。

队列(FIFO先进先出)的实现主要是用不带头循环的单链表的形式构建,注意需要记录头结点与尾结点的地址(指针形式),入队列使用尾结点,出队列使用头结点,另外头尾结点也方便实现队列的尾数据和头数据的取出。

博主代码的命名方式已经尽可能通俗易懂,大家仔细阅读的话,是可以完全弄明白栈与队列的具体实现方式的,因此博主就直接将代码展示给大家,里面有相应的注释说明,另外不好弄明白的地方我也进行了相应的介绍,如下:

Stack.h

#pragma once

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

typedef int STDataType;
#define CAPACITY 4

typedef struct Stack
{
   
	STDataType* _data;
	int _top;
	int _capacity;
}Stack;


//初始化
void StackInit(Stack* ps);
//入栈
void StackPush(Stack* ps, STDataType x);
//出栈
void StackPop(Stack* ps);
//读取栈顶数据
STDataType StackTop(Stack* ps);
//栈长度
int StackSize(Stack* ps);
//判断栈是否为空,空即为真,不空即为假
int StackEmpty(Stack* ps);
//销毁数据
void StackDestroy(Stack* ps);

Stack.c

#include "Stack.h"

void StackInit(Stack* ps)
{
   
	//断言,ps为空则报错
	assert(ps);
	ps->_data = (STDataType*)malloc(sizeof(STDataType)*CAPACITY);
	if (ps->_data == NULL)
	{
   
		printf("申请空间失败\n");
		
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值