前言
本文章主要是为下一篇的在线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");