堆栈一个重要的特点是:入栈方式和出栈方式,是后进先出
它不同于线性表
结构:可以有位置操作,比如说一个线性表的数据结构.我们在操作第几个位置
的元素,这里在栈
这种数据结构中是没有的.
栈中的数据操作:push
压栈,pop
入栈.还有其他的一些操作,但是这两个是必须的.实现这样的数据结构可以用顺序存储
即数组实现,也可以使用链式存储
.
下面我们就用顺序存储来实现栈数据结构
和几个很重要的操作.
// 堆栈的数组实现
// Created by Sivin on 2018/4/6.
//
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef int ElementType;
struct Node{
ElementType data[MAX_SIZE];
//因为栈的操作,必须是在栈顶进行的,因此我们用数组实现时,需要记录顶部元素的位置
int top;
};
typedef struct Node Stack;
typedef struct Node *PStack;
/**
* 获取堆栈的大小
* @param stack
* @return
*/
int getStackSize(PStack stack){
if(stack != NULL){
return stack->top+1 ;
}
return -1;
}
int push(PStack stack , ElementType e){
if(stack == NULL){
printf("堆栈指针为空,堆栈不存在\n");
return -1;
}
if(stack->top == MAX_SIZE-1){
printf("堆栈已满\n");
return -1;
}
stack->data[++(stack->top)] = e;
}
int pop(PStack stack ,ElementType *e){
if(stack == NULL){
printf("堆栈指针为空,操作失败\n");
return -1;
}
if(stack->top == -1){
printf("堆栈已空\n");
return -1;
}
*e = stack->data[stack->top];
stack->top--;
return 0;
}
int main(){
Stack stack;
stack.top = -1;
printf("stack size = %d\n",getStackSize(&stack));
push(&stack,5);
push(&stack,7);
push(&stack,9);
printf("stack size = %d\n",getStackSize(&stack));
int elm = 0;
while ( pop(&stack,&elm) != -1){
printf("elm= %d\t",elm);
}
return 0;
}
网友评论