栈 ~ 程序实现一
本篇博客基于 温故而知新 -> 数据结构 -> 线性表 -> 栈 中的理论知识,利用 C
中的 结构体 对数据结构中的 栈 进行代码实现!
其中涉及了栈的 增(入栈)删(出栈)查(栈顶元素)改(没写(~ ̄▽ ̄)~),判空,打印等操作!并附带了实例以及对应的运行结果!
注意:本篇博客中 栈 的程序实现借鉴了 利用结构体实现顺序表 的程序!
具体内容如下
(1)newStack.h
#ifndef __NEWSTACK_H__
#define __NEWSTACK_H__
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int STDataType;
//顺序结构实现:实现一个更简单的顺序表
typedef struct stack
{
STDataType *_data;
int _size;
int _capacity;
}stack;
#endif
(2)main.c
#include"newStack.h"
void initStack(stack *st)
{
//空栈
if (st == NULL)
return;
st->_data = NULL;
st->_size = st->_capacity = 0;
}
void checkCapacity(stack *st)
{
if (st->_size == st->_capacity)
{
int newCap = st->_capacity == 0 ? 1 : 2 * st->_capacity;
st->_data = (STDataType*)realloc(st->_data, sizeof(STDataType)*newCap);
st->_capacity = newCap;
}
}
void stackPush(stack *st, STDataType val)
{
//尾插
if (st == NULL)
return;
checkCapacity(st);
st->_data[st->_size++] = val;
}
void stackPop(stack *st)
{
//尾删
if (st == NULL || st->_size == 0)
return;
--st->_size;
}
int stackSize(stack *st)
{
if (st == NULL)
return 0;
return st->_size;
}
int stackEmpty(stack* st)
{
if (st == NULL || st->_size == 0)
return 1;//返回1为空
else
return 0;
//return st->_size;
}
STDataType stackTop(stack *st)
{
return st->_data[st->_size - 1];//栈顶元素
}
void stackDestory(stack *st)
{
if (st)
{
if (st->_data)
{
free(st->_data);
st->_data = NULL;
st->_size = 0;
st->_capacity = 0;
}
}
}
void stackPrint(stack *st)
{
printf("栈内元素为:");
int i = st->_size - 1;
while (i >= 0)
{
printf("%d ", st->_data[i]);
i--;
}printf("\n");
}
void test()
{
stack st;
initStack(&st);
stackPush(&st, 1);
stackPush(&st, 2);
stackPush(&st, 3);
stackPush(&st, 4);
stackPrint(&st);
/* 打印栈内元素,并删除各个元素 */
while (!stackEmpty(&st))
{
printf("%d ", stackTop(&st));
stackPop(&st);
}
printf("\n");
stackPrint(&st);// 结果为空,因为上面删除了所有元素
}
int main()
{
test();
system("pause");
return 0;
}
(3)运行结果