C语言模拟栈

来源:互联网 发布:淘宝简约店招 编辑:程序博客网 时间:2024/06/09 16:56

头文件:

#include<stdlib.h>#include<stdio.h>#include<memory.h>#define N 100struct stack{int a[N];int top;//标识栈顶};//起别名typedef struct stack Stack;//因为有副本机制,所以这儿使用地址。void init(Stack *p);//初始化栈int isempty(Stack *p);//判断栈是否为空int isfull(Stack *p);//判断栈是否满int gettop(Stack *p);//获取栈顶void push(Stack *p,int key);//进栈void pop(Stack *p);//出栈void show(Stack *p);//显示栈的所有数据

stack.c  main函数:


#include"stack.h"//栈的初始化void init(Stack *p){p->top = -1;//-1代表为空//第一个数组的地址,第二个要复制的数据,第三个数据的大小memset(p->a, 0, sizeof(int)*N);//初始化数组的大小,并全部初始化为 0}//判断栈是否为空int isempty(Stack *p){if (p->top == -1){return 1; //为空}else{return 0;//不为空}}// 判断栈是否满int isfull(Stack *p){if (p->top == N-1){return 1;//溢出}else{return 0;//没有溢出}}//得到栈顶的值int gettop(Stack *p){return p->a[p->top];}//进栈,key 为进栈的值void push(Stack *p, int key){//栈顶加1后判断栈是否满if (isfull(p)){printf("栈溢,无法进栈!");return;}else{//得到栈顶加 1p->top = p->top + 1;//进栈p->a[p->top] = key;}}void pop(Stack *p){//判断栈是否为空if (isempty(p)){printf("栈为空,不能出栈!");return;}else{printf("%d\n", p->a[gettop(p)]);p->top = p->top - 1;}}//显示栈的所有数据void show(Stack *p){while (!isempty(p)){printf("%3d", p->a[p->top]);p->top -= 1;}}void main(){Stack stack;//初始化init(&stack);for (int i = 0; i < 5; i++){push(&stack,i);}show(&stack);system("pause");}



0 0