网站运营的工作内容百度推广官网入口
上一篇文章对栈做了简要描述并使用链表实现了栈,接着,使用数组来模拟栈,两者做个对比。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 1000 //暂定为1000//定义数组矩阵结构体
typedef struct
{int *data;int size;
}ArrarStack;//构造函数
ArrarStack *CreatArrarStack()
{ArrarStack *stack = (ArrarStack *)malloc(sizeof(ArrarStack));stack->data = (int *)malloc(sizeof(int)*MAX_SIZE);stack->size = 0;return stack;
}//析构函数
void delArrarStack(ArrarStack *stack)
{free(stack->data);free(stack);
}//获取栈的长度
int size(ArrarStack *stack)
{return stack->size;
}//判断栈是否为空
bool isEmpty(ArrarStack *stack)
{return stack->size == 0;
}//入栈
void push(ArrarStack *stack, int num)
{if(stack->size == MAX_SIZE){printf("栈已满\n");return ;}stack->data[stack->size++] = num;
}//访问栈顶元素
int gettop(ArrarStack *stack)
{if(stack->size == 0){printf("栈为空\n");return INT_MAX;}return stack->data[stack->size-1];
}//出栈
int pop(ArrarStack *stack)
{int val = gettop(stack);stack->size--;return val;
}//打印栈
void Print(ArrarStack *stack)
{int i=stack->size-1;while(i>=0){printf("\t%d\n",stack->data[i]);i--;}printf("************\n");
}
int main()
{ArrarStack *stack = CreatArrarStack(); //创建栈char op[10];while(scanf("%s",op)!=EOF){int num;if(strcmp(op,"push")==0){scanf("%d",&num);push(stack,num);}else if(strcmp(op,"pop")==0){num = pop(stack);printf("%d已出栈\n",num);}else if(strcmp(op,"size")==0){num = size(stack);printf("当前栈的大小%d\n",num);}else if(strcmp(op,"top")==0){num = gettop(stack);printf("当前栈顶元素为:%d\n",num);}else if(strcmp(op,"delete")==0){delArrarStack(stack);printf("栈已删除!\n");}else if(strcmp(op,"show")==0){Print(stack);}}return 0;
}
测试:
输入:
push 1
push 3
push 5
push 7
showpop
size
pop
size
top
show
delete
输出:
7
5
3
1
************
7已出栈
当前栈的大小3
5已出栈
当前栈的大小2
当前栈顶元素为:3
3
1
************
栈已删除!