C语言实现栈
利用数组实现简单的栈操作:
- 入栈
- 出栈
- 栈空
- 取栈顶元素
/******************************************************************************************************
* function:用数组实现栈,并完成一些栈的常规操作:入栈、出栈等操作
* author:yahai.zhang
* time: 2018.7.15
* File Name:MyStack.c
******************************************************************************************************/
#include<stdio.h>
#include <string.h>
#define STACK_MAX_LEN 100
/* 栈内存放的数据 */
struct DATA{
int age;
char name[20];
};
/* 实现顺序栈,使用数组来实现 */
struct MyStack
{
struct DATA data[STACK_MAX_LEN];
int top;
};
/* 初始化栈 */
void init(struct MyStack *s)
{
s->top=-1;
}
/* 判断栈是否为空 */
int isEmpty(struct MyStack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
/* 判断栈是否已满了 */
int isFull(struct MyStack *s)
{
if(s->top==STACK_MAX_LEN-1)
return 1;
else
return 0;
}
/* 入栈 */
void Push(struct MyStack *s,struct DATA element)
{
if(!isFull(s)) {
s->top++;
memcpy(&s->data[s->top], &element, sizeof(struct DATA));
} else {
printf("栈满\n");
}
}
/* 出栈 */
void Pop(struct MyStack *s)
{
if(!isEmpty(s)) {
s->top--;
} else {
printf("栈空\n");
}
}
/* 取栈顶元素 */
struct DATA Top(struct MyStack *s)
{
if(!isEmpty(s)) {
return s->data[s->top];
} else {
printf("栈空\n");
}
}
/* 销毁栈 */
void Destroy(struct MyStack *s)
{
s->top=-1;
}
/* 打印栈内容 */
d_printf(struct MyStack *st)
{
int i = 0;
printf("=================================================\n");
printf("打印栈\n");
for(i; i <= st->top; i++) {
printf("element[%d]--->name:%s, age:%d\n", i, st->data[i].name, st->data[i].age);
}
printf("=================================================\n");
}
int main()
{
struct MyStack st;
init(&st);
printf("该栈存放的是个人的姓名及年龄信息...\n");
int n = 0, i=1;
printf("入栈n个人员的信息: n=");
scanf("%d", &n);
while(n--) {
printf("请输入第%d个人员的信息:", i++);
struct DATA da;
scanf("%s %d", &da.name, &da.age);
Push(&st, da);
}
d_printf(&st);
printf("弹栈操作1次\n");
Pop(&st);
d_printf(&st);
return 0;
}
运行结果如下图所示: