顺序栈
顺序栈相关函数的头文件
/*
顺序堆栈的相关函数
因为没有循环,时间复杂度为 O(1)
*/
/*==============栈的结构体========================*/
typedef struct{
DataType stack[MaxStackSize];
int top;
}SeqStack;
/*================初始化栈==========================*/
void StackInitiate(SeqStack *s){
s->top = 0; //使其栈顶为0
}
/*====================判空==========================*/
int StackNotEmpty(SeqStack s){
if(s.top <= 0){ //栈空输出0否则输出1
return 0;
}else{
return 1;
}
}
/*=====================将元素x入栈========================*/
int StackPush(SeqStack *s, DataType x){
if(s->top >= MaxStackSize){
printf("堆栈已满!\n");
return 0;
}else{
s->stack[s->top] = x; //栈顶存入值
s->top++; //栈顶指针向上移动
return 1;
}
}
/*=====================出栈,由*d带回=========================*/
int StackPop(SeqStack *s, DataType *d){
if(s->top <= 0){
printf("堆栈为空!\n");
return 0;
}else{
s->top--; //栈顶指针下移
*d = s->stack[s->top]; //出栈
return 1;
}
}
/*==============取出栈顶元素,由*d带回========================*/
int StackTop(SeqStack s, DataType *d){
if(s.top<=0){
printf("堆栈为空!\n");
return 0;
}else{
*d = s.Stack[s.top-1]; //取出栈顶元素
return 1;
}
}
测试代码
#include <stdio.h>
#define MaxStackSize 100
typedef int DataType;
#include "SeqStack.h"
int main(){
SeqStack myStack;
int i,x;
StackInitiate(&myStack); //初始化
for(i=0; i<10; i++){
StackPush(&myStack,i+1);
}
StackTop(myStack, &x);
printf("当前栈顶元素为:%d\n",x);
printf("出栈序列\n");
while(StackNotEmpty(myStack)){
StackPop(&myStack, &x); //出栈
printf("%d ",x);
}
//printf("\n");
//system("pause");
getch();
return 0;
}