栈的基础功能实现(c语言版)
数据结构中的栈结构是一种顺序结构,类似于手枪子弹膛的结构。先进入的数据压入栈底,后进入的数据在栈顶,出数据时,先进入的数据后出,后进入的数据先出。栈由于只能在栈顶放入数据,出数据时也在栈顶出数据,所以用链表不是很方便,时间复杂度较高,反之用顺序表就有很大的优势。
以下我们用一个顺序表来实现一个栈结构。
定义一个栈的结构体
#include<stdio.h> #include<windows.h> #include<math.h> #include<stdlib.h> #define StackSize 100 typedef int DataType; typedef struct Stack { DataType* _array; size_t _top; size_t _end; }Stack;初始化
void StackInit(Stack* s) { s->_array = (DataType*)malloc(StackSize * sizeof(DataType)); s->_end = 0; s->_top = 0; }打印栈
void StackPrint(Stack* s) { int i; if (s->_top == 0) { printf("该栈为空!\n"); } else { for (i = 0;i < (s->_top - s->_end);i++) { printf("%d ", s->_array[i]); } } }增加数据
void StackPush(Stack* s, DataType x) { s->_array[s->_top] = x; s->_top++; }删除数据
void StackPop(Stack* s) { if (s->_top == 0) { printf("该栈为空!\n"); } else { --s->_top; } }取栈顶数据
DataType StackTop(Stack* s) { return s->_array[s->_top]; }栈判空
int StackEmpty(Stack* s) { if (s->_top == 0) { return 0; } else return 0; }