数据结构:栈

一、概念

栈就是操作受限的线性表,只允许在一端进行操作的线性结构

特点:先进后出

把可以操作的一端叫做栈顶,不能操作的一端叫栈底

二、顺序栈

栈的顺序实现,仍然需要通过数组实现,除了数组之外,还需要一个栈顶元素对应的下标

三、功能

顺序栈的结构体

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--;

}
相关推荐
Nil2083 小时前
leetcode 78子集
数据结构·算法·leetcode
喜欢吃燃面4 小时前
深入 C++ STL:从 unordered_set与unordered_map到底层哈希表的原理与实现
数据结构·c++·散列表
en.en..4 小时前
Linux fork() 工作原理
数据结构·算法
不会就选b6 小时前
数据结构之树&&二叉树(二)
数据结构·算法
小刘在重生~8 小时前
Java 集合|Collection、List、ArrayList、LinkedList、泛型、Collections 工具类
java·数据结构·list
我不会起名字3228 小时前
一天一道算法题(29):单调栈
java·数据结构·python·算法·leetcode·golang·单调栈
苦瓜小生9 小时前
【前端】【力扣与手撕】十天带你刷完前端算法与手撕,全是最简单好记的最优解法!day4
前端·数据结构·算法·leetcode·面试
少司府10 小时前
C++进阶:智能指针
开发语言·数据结构·c++·b树·算法·c·智能指针
LuminousCPP11 小时前
数据结构-排序(一):基础排序算法横向对比|冒泡、插入、希尔、堆与双向选择,详解二分 / Knuth 增量
c语言·数据结构·笔记·算法·排序算法
青山木11 小时前
Hot 100 --- 买卖股票的最佳时机
java·数据结构·算法·leetcode·贪心算法