#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MaxSize 50 // 定义栈中元素的最大个数
typedef struct{
int data[MaxSize]; // 存放栈中元素
int top; // 栈顶指针
}SqStack,*sqStack;
/*
栈顶指针:S.top,初始时设置 S.top = -1; 栈顶元素:S.data[S.top]
进栈操作:栈不满时,栈顶指针先+1,再设置栈顶的值
出栈操作:栈非空时,先取栈顶元素,再讲栈顶指针-1
栈空条件:S.top == -1; 栈满条件:S.top == MaxSize-1; 栈长:S.top+1;
*/
// 1. 初始化
void InitStack(sqStack s){
(*s).top = -1;
}
// 2. 栈判空; true: 空,反之 非空
bool StackEmpty(SqStack s){
if(s.top == -1) return true;
return false;
}
// 3. 进栈 栈不满时,栈顶指针先+1,再设置栈顶的值
bool Push(sqStack S,int x){
if(S->top == MaxSize-1) return false;
S->top++;
S->data[S->top] = x;
return true;
}
/*
4. 出栈
栈空,返回false
先出栈,指针再减1
*/
bool Pop(sqStack S,int *n){
if(S->top == -1) return false;
(*n)= S->data[S->top];
S->top--;
return true;
}
/*
5. 读栈顶元素
*/
bool GetTop(sqStack S,int *n){
if(S->top == -1) return false;
*n = S->data[S->top];
return true;
}
/*
从栈底到栈顶打印栈内元素
*/
void printStack(sqStack S){
int i = 0;
while(i <= S->top){
printf("%d ",S->data[i]);
i++;
}
printf("\n");
}
int main(){
SqStack s;
InitStack(&s);
printf("初始化栈 %d\n",s.top);
if(StackEmpty(s)){
printf("栈空\n");
}else{
printf("栈非空\n");
}
sqStack S = &s;
int i;
printf("出栈 %d 栈顶元素 %d\n",Pop(S,&i),i);
if(Push(S,1)){
printf("进栈成功\n");
}else{
printf("进栈失败\n");
}
printStack(S);
printf("出栈 %d\n",Pop(S,&i));
printf("栈顶元素 %d\n",i);
Push(S,2);
Push(S,3);
Push(S,4);
printStack(S);
int j;
printf("读栈顶元素 %d\n",GetTop(S,&j));
printf("栈顶元素 %d\n",j);
return 0;
}
栈-C语言实现
最新推荐文章于 2024-08-13 20:19:03 发布