栈的实现
两种方法实现:
- 顺序栈
:基于静态顺序表 链式栈
:基于链表顺序栈
函数的结构体和声明
基于顺序表的栈,也就是用数组的增删查改
我们看结构体和声明
typedef char SeqType;
typedef struct SeqStack{
size_t size;
SeqType data[MAXREPOSITORY];
}SeqStack;
// 初始化。
void SeqStackInit(SeqStack *seq);
// 入栈。
void SeqStackPushStack(SeqStack *seq, SeqType value);
// 出栈。
void SeqStackPopStack(SeqStack *seq);
// 取栈顶元素。
int SeqStackFindTop(SeqStack *seq, SeqType *value);
// 销毁。
void SeqStackDestory(SeqStack *seq);
函数的定义
#include "SeqStack.h"
// 函数在初始化时候已经为其开辟空间所以这里是要初始化就行
// 初始化。
void SeqStackInit(SeqStack *seq)
{
if (seq == NULL)
{
// 非法输入。
return;
}
seq->size = 0;
}
// 这里的入栈就和顺序表的尾插一样,注意就是需要判断是否栈满
// 入栈。
void SeqStackPushStack(SeqStack *seq, SeqType value)
{
if (seq == NULL)
{
return;
}
if (seq->size > MAXREPOSITORY)
{
return;
}
seq->data[seq->size] = value;
++seq->size;
}
// 打印栈。
void PrintSeqStack(SeqStack *seq)
{
if (seq == NULL)
{
return;
}
printf("栈底->");
size_t i = 0;
for (; i<seq->size; ++i)
{
printf("[%c]->",seq->data[i]);
}
printf("栈顶\n");
}
// 出栈需要注意栈是否为空
// 出栈。
void SeqStackPopStack(SeqStack *seq)
{
if (seq == NULL)
{
// 非法输入。
return;
}
if (seq->size == 0)
{
// 空顺序表。
return;
}
--seq->size;
}
// 取栈顶元素。
int