# 使用数组实现堆栈

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
#define OK    1
#define ERROR 0
typedef int Status;
typedef int SElemType;
struct SqStack
{
SElemType data[MAXSIZE];//数组实现堆栈
int top;                //栈元素序号
};

Status push(struct SqStack *S, SElemType value)
{
/*栈满*/
if(S->top == MAXSIZE - 1)
{
return ERROR;
}
S->top++;
S->data[S->top] = value;
return OK;
}

Status pop(struct SqStack *S, SElemType *value)
{
/*栈空*/
if(S->top == -1)
return ERROR;
*value = S->data[S->top];
S->top--;
return OK;
}

int is_full(struct SqStack *S)
{
return S->top == MAXSIZE- 1;
}

int is_empty(struct SqStack *S)
{
return S->top == -1;
}

int main(void)
{
struct SqStack *stack = (struct SqStack*)malloc(sizeof(struct SqStack));
int i = 0;
int value;
stack->top = -1;//这句话很重要，不然会出错
for(i=0; i<=10; i++)
{
if(is_full(stack))
{
printf("stack is full\n");
break;
}
push(stack, i);
printf("top is %d\n", stack->data[stack->top]);
}

for(i=0; i<=10; i++)
{
if(is_empty(stack))
{
printf("stack is empty\n");
break;
}
pop(stack, &value);
printf("%d pop\n", value);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
#define OK    1
#define ERROR 0
typedef int Status;
typedef int SElemType;
struct SqStack
{
SElemType data[MAXSIZE];//数组实现堆栈
int top;                //栈元素序号
};

Status push(struct SqStack *S, SElemType value)
{
/*栈满*/
if(S->top == MAXSIZE - 1)
{
return ERROR;
}
S->top++;
S->data[S->top] = value;
return OK;
}

Status pop(struct SqStack *S, SElemType *value)
{
/*栈空*/
if(S->top == -1)
return ERROR;
*value = S->data[S->top];
S->top--;
return OK;
}

int is_full(struct SqStack *S)
{
return S->top == MAXSIZE- 1;
}

int is_empty(struct SqStack *S)
{
return S->top == -1;
}

int main(void)
{
struct SqStack *stack = (struct SqStack*)malloc(sizeof(struct SqStack));
int i = 0;
int value;
stack->top = -1;//这句话很重要，不然会出错
for(i=0; i<=10; i++)
{
if(is_full(stack))
{
printf("stack is full\n");
break;
}
push(stack, i);
printf("top is %d\n", stack->data[stack->top]);
}

for(i=0; i<=10; i++)
{
if(is_empty(stack))
{
printf("stack is empty\n");
break;
}
pop(stack, &value);
printf("%d pop\n", value);
}
return 0;
}

• 本文已收录于以下专栏：

## 用数组实现堆栈

stack.h#define STACK_TYPE char extern void push(STACK_TYPE value);extern void pop(void);extern STACK...
• dingyuanpu
• 2010年08月13日 13:38
• 949

## JS数组实现队列和堆栈

JS分别为队列和堆栈的实现提供了两个函数。 队列实现： shift() ： 删除集合中第一个元素，并返回这个元素的值 unshift() ：在集合开头添加新元素（一个或多个均可），并返回新的集合...
• code_better
• 2016年07月26日 20:27
• 1046

## 使用java实现后进先出的堆栈功能【笔试题】

• Abubu123
• 2017年04月18日 17:03
• 2273

## 数组模拟堆栈

• zxiang248
• 2016年07月04日 19:18
• 452

## PHP使用数组实现堆栈和队列

• joyksk
• 2017年06月20日 11:59
• 1577

## 数组实现堆栈操作

• sdlwzzm19971226
• 2017年03月20日 16:14
• 479

## 4-7 在一个数组中实现两个堆栈 (20分)

• wanmeiwushang
• 2016年07月11日 19:12
• 2634

## 在一个数组中实现两个堆栈

4-7 在一个数组中实现两个堆栈   (20分) 本题要求在一个数组中实现两个堆栈。 函数接口定义： Stack CreateStack( int MaxSize ); bool P...
• ccDLlyy
• 2016年09月24日 09:25
• 1115

## 分别用数组和链表实现栈

• mengzhejin
• 2014年07月15日 18:20
• 970

## 数据结构与算法——在一个数组中实现两个堆栈（C语言）

• aaa946231
• 2016年01月24日 11:59
• 752

举报原因： 您举报文章：使用数组实现堆栈 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)