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

文章目录

  • 前言
    • Stack.h
    • Stack.c
  • 队列
    • Queue.h
    • Queue.c
  • 结束语

前言

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

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

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

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

Stack.h

#pragma once

#include 
#include 
#include 
#include 

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 

你可能感兴趣的:(数据结构,C语言,数据结构,队列,栈,c语言)