博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构——栈
阅读量:7092 次
发布时间:2019-06-28

本文共 1091 字,大约阅读时间需要 3 分钟。

hot3.png

一、概念

栈:栈是一个先进后出的线性表,它要求只在表尾进行删除和插入等操作。所以栈其实就是一个线性表,不过操作有特殊的要求和限制(1)元素必须先进后出;(2)操作只能在线性表尾进行

栈的基本操作只有2个,入栈(Push)和出栈(Pop)

 

 

栈的结构示意图(网上找的)

 

 

 

 

二、栈的实现

下面介绍如何使用顺序表实现一个简单的栈

(1)定义栈的结构

typedef struct {	DATA data[SIZE+1]; //栈的数据元素,SIZE表示栈大小,数据从下标1开始保存	int top; //栈顶,top=0时表示栈为空}SeqStack;

(2)初始化栈

SeqStack *SeqStackinit(){	SeqStack *p;	if (p=(SeqStack *)malloc(sizeof(SeqStack))) {		p->top = 0;		return p;	}	return NULL;}

(3)释放栈

void SeqStackFree(SeqStack *s){	if (s)		free(s);}

(4)判断栈的状态

int SeqStackIsEmpty(SeqStack *s){	return (s->top == 0);}void SeqStackClear(SeqStack *s){	s->top = 0;}int SeqStackIsFull(SeqStack *s){	return (s->top == SIZE);}

(5)入栈

int SeqStackPush(SeqStack *s, DATA data){	if ((s->top + 1) > SIZE) {		printf("栈溢出\n");		return 0;	}	s->data[++s->top] = data;	return 1;}

(6)出栈

DATA SeqStackPop(SeqStack *s){	if (s->top == 0) {		printf("栈为空\n");		exit(0);	}	return (s->data[s->top--]);}

(7)获取栈顶元素

DATA SeqStackPeek(SeqStack *s){	if (s->top == 0) {			printf("栈为空\n");			exit(0);	}	return (s->data[s->top]);}

打完手工,可能有不完善或者bug,只能等以后发现了再修改了

转载于:https://my.oschina.net/wangande2014/blog/685682

你可能感兴趣的文章
多个站点的VSFTPD
查看>>
初级篇第一期:从0开始
查看>>
窗体上有一JTable,如何让数据库里的数据在表格里显示出来
查看>>
如何在A10的AX上实现TACACS+的AAA认证
查看>>
文件的元数据信息,时间戳,别名,练习
查看>>
蜕变:从菜鸟到Linux安全专家 图书简介、前言、目录发布
查看>>
VS2017 远程调试小记
查看>>
php文件上传接口及文件上传错误服务器配置
查看>>
[实战]MVC5+EF6+MySql企业网盘实战(5)——页面模板
查看>>
CSS 参考手册
查看>>
如何用c++发出音乐
查看>>
JLOI2015 城池攻占
查看>>
基本数据类型
查看>>
Can you solve this equation? 详细解答
查看>>
exit命令详解
查看>>
date命令详解
查看>>
C#序列化与反序列化
查看>>
首页logo的代码标志性写法,方便SEO
查看>>
Collection of Tools - Fix problems that programs cannot be installed or uninstalled
查看>>
DP+高精度 URAL 1036 Lucky Tickets
查看>>