标签:clu 原因 turn define auth 基本 技术 参数 大小
栈的特色:后进先出,先进后出。
说明:本文仅做了最基本的栈结构和简单出入栈操作,理解栈的特点为首要目的。
一、栈结构的定义
#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("正在入栈...\n");
while(i<10)
{
if(push(temparr[i],mystack)==STACKFULL)
{
printf("栈满\n");
break;
}
else
{
printf("%d\t",temparr[i]);
i++;
}
}
printf("\n");
if(i==10)
{
printf("正在出栈...\n");
for(i=0;i<10;i++)
{
if(pop(popdata,mystack)==STACKEMPTY)
{
printf("栈空:\n");
break;
}
else
{
printf("%d\t",popdata);
}
}
printf("\n");
}
if(pop(popdata,mystack)==STACKEMPTY)
{
printf("栈空:\n");
}
else
{
printf("---%d---\n",popdata);
}
return 0;
}

标签:clu 原因 turn define auth 基本 技术 参数 大小
原文地址:https://www.cnblogs.com/aloneYu/p/11835232.html