数据结构复习--栈
Posted aloneyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构复习--栈相关的知识,希望对你有一定的参考价值。
栈的特色:后进先出,先进后出。
说明:本文仅做了最基本的栈结构和简单出入栈操作,理解栈的特点为首要目的。
一、栈结构的定义
#include <stdio.h> /*栈的数据结构和出栈入栈*/ /*@author Funky_天晴了*/ /*@date 2019.11.11 */ //定义出错常量 #define STACKFULL 0x01 #define STACKEMPTY 0x02 typedef int ElemType; #define stacksize 10 //初始栈大小 #define stacksizeadd 50 //栈空间大小增量 //定义栈结构体 typedef struct { ElemType *top; //栈顶指针 ElemType *bottom; //栈底指针 ElemType stackspace[stacksize]; //栈存储空间 }stack;
二、初始化以及出入栈函数
//栈初始化 void initStack(stack &s) { //栈顶指针指向栈空间头部 s.top = s.stackspace; //栈底指针指向栈空间尾部 s.bottom = &s.stackspace[stacksize-1]; } //预备函数 判断栈满和栈空 bool isStackFull(stack &s) { if(s.top-1==s.bottom) return true; else return false; } bool isStackEmpty(stack &s)//判断top指针是否到达栈顶 { if(s.top==s.stackspace) return true; else { return false; } } //入栈 char push(ElemType data,stack &s) { //栈满错误 if(isStackFull(s)) return STACKFULL; //正常入栈 在top位置存入数据,然后top“下移” *s.top++ = data; return 0; } //出栈 出栈数据为data char pop(ElemType &data,stack &s) { //栈空错误 if(isStackEmpty(s)) return STACKEMPTY; else { //正常出栈 top先"上移",然后读取数据 data = *(--s.top); return 0; } }
(注:判断栈满函数--bool isStackFull(stack &s)--以及栈判空函数虽然未对栈本身数据做改变,但也使用引用的原因在于,【若使用形参,则形参的栈顶指针、栈底指针以及栈顶的地址和使用时初始化的地址一般不对应】使用时保证地址对应。
例:若不用引用,则s.stackspace = 0x1234,是基于形参s的固定地址,调用时,s_new.stackspace = 0x5678,是基于初始化时系统给定的地址,若干个栈会有若干不同地址,是变化的。可见不使用引用,则对于不同的参数s,s.top不同,s.stackspace却同为0x1234,是不可取的。)
三、调用及结果
int main(int argc, char *argv[]) { stack mystack; const char temparr[] = {9,8,7,6,5,4,3,2,1,0}; char i = 0; ElemType popdata = -1; initStack(mystack); printf("正在入栈... "); while(i<10) { if(push(temparr[i],mystack)==STACKFULL) { printf("栈满 "); break; } else { printf("%d ",temparr[i]); i++; } } printf(" "); if(i==10) { printf("正在出栈... "); for(i=0;i<10;i++) { if(pop(popdata,mystack)==STACKEMPTY) { printf("栈空: "); break; } else { printf("%d ",popdata); } } printf(" "); } if(pop(popdata,mystack)==STACKEMPTY) { printf("栈空: "); } else { printf("---%d--- ",popdata); } return 0; }
以上是关于数据结构复习--栈的主要内容,如果未能解决你的问题,请参考以下文章