目录
一、了解栈的结构特点
二、具体实现
代码如下:
一、了解栈的结构特点
1、栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶 出栈:栈的删除操作叫做出栈。出数据也在栈顶
二、具体实现
由于栈实质是一种线性表,因此可以用两种方式来实现:顺序表 或 链表
这里我使用的是类似顺序表的方式来实现。

目录
一、了解栈的结构特点
二、具体实现
代码如下:
1、栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶 出栈:栈的删除操作叫做出栈。出数据也在栈顶
由于栈实质是一种线性表,因此可以用两种方式来实现:顺序表 或 链表
这里我使用的是类似顺序表的方式来实现。
typedef char Stacktype;
typedef struct Stack
{
int top;
Stacktype* data;
int capacity;
}Stack;
void Stack_init(Stack* pphead); //栈的初始化
void Stack_destory(Stack* pphead); //栈的清空
void Stack_push(Stack* pphead, Stacktype data); //插入数据,压栈
void Stack_pop(Stack* pphead); //出栈(删除数据)
bool Stack_Empty(Stack* pphead); //判断栈是否为空
Stacktype Stack_Top(Stack* pphead); //调出栈顶元素
int Stack_Size(Stack* pphead); //查看数据个数
//栈的初始化
void Stack_init(Stack* pphead)
{
pphead->top = 0;
pphead->capacity = 0;
pphead->data = NULL;
}
//栈的清空
void Stack_destory(Stack* pphead)
{
pphead->top = 0;
pphead->capacity = 0;
free(pphead->data);
pphead->data = NULL;
}
//插入数据,压栈
void Stack_push(Stack* pphead, Stacktype data)
{
assert(pphead);
if (pphead->top == pphead->capacity)
{
int Newcapacity = (pphead->capacity == 0) ? 4 : ((pphead->top) * 2);
Stacktype* temp = NULL;
temp = (Stacktype*)realloc(pphead->data, sizeof(Stacktype) * Newcapacity);
if (temp == NULL)
{
printf("Stack_push");
exit(-1);
}
pphead->data = temp;
pphead->top = Newcapacity;
}
(pphead->data)[pphead->capacity] = data;
pphead->capacity++;
}
//出栈(删除数据)
void Stack_pop(Stack* pphead)
{
assert(pphead);
assert(Stack_Empty(pphead));
pphead->capacity--;
}
//判断栈是否为空
bool Stack_Empty(Stack* pphead)
{
assert(pphead);
return pphead->capacity != 0;
}
//调出栈顶元素
Stacktype Stack_Top(Stack* pphead)
{
assert(pphead);
assert(Stack_Empty(pphead));
return pphead->data[pphead->capacity - 1];
}
//查看数据个数
int Stack_Size(Stack* pphead)
{
assert(pphead);
return pphead->top;
}