一、概念
栈就是操作受限的线性表,只允许在一端进行操作的线性结构
特点:先进后出
把可以操作的一端叫做栈顶,不能操作的一端叫栈底
二、顺序栈
栈的顺序实现,仍然需要通过数组实现,除了数组之外,还需要一个栈顶元素对应的下标
三、功能
顺序栈的结构体
cs
#ifndef __SEQ_STACk_H__
#define __SEQ_STACk_H__
#include <stdio.h>
#include <stdlib.h>
#define MAX 7
typedef int datatype;
typedef struct seq_stack{
datatype data[MAX];
int top;
}seq_stack,*seq_p;
//创建顺序桟
seq_p creat_stack();
//判空
int empty_stack(seq_p S);
//判满
int full_stack(seq_p S);
//入桟
void push_stack(seq_p S,datatype data);
//输出桟中的元素
void show_stack(seq_p S);
//出桟
void pop_stack(seq_p S);
#endif
1.创建顺序栈
cs
seq_p creat_stack(){
seq_p S=(seq_p)malloc(sizeof(seq_stack));
if(S==NULL){
printf("入参为空\n");
return NULL;
}
S->top=-1;
return S;
}
2.判空
cs
int empty_stack(seq_p S){
if(S==NULL){
printf("入参为空\n");
return -1;
}
return S->top==-1?1:0;
}
3.判满
cs
//判满
int full_stack(seq_p S){
if(S==NULL){
printf("入参为空\n");
return -1;
}
return S->top==MAX-1?1:0;
}
4.入栈
cs
//入桟
void push_stack(seq_p S,datatype data){
if(S==NULL){
printf("入参为空\n");
return;
}
if(full_stack(S)){
printf("桟满,不能插入\n");
return;
}
S->top++;//先加
S->data[S->top]=data;//再压入数值
}
5.遍历输出
cs
//输出桟中的元素
void show_stack(seq_p S){
if(S==NULL){
printf("入参为空\n");
return;
}
if(empty_stack(S)){
printf("桟为空\n");
return;
}
//要保留桟的性质,只能从桟顶操作
for(int i=S->top;i>=0;i--){
printf("%d ",S->data[i]);
}
}
6.出栈
cs
//出桟
void pop_stack(seq_p S){
if(S==NULL){
printf("入参为空\n");
return;
}
if(empty_stack(S)){
printf("桟空\n");
return;
}
printf("出桟的数值为%d\n",S->data[S->top]);
S->top--;
}