C语言栈的用法(创建、入栈、出栈、遍历)

C语言栈的用法(创建、入栈、出栈、遍历)

C语言栈的用法(创建、入栈、出栈、遍历)

本篇博客主要简单介绍如何使用C语言构建栈,元素入栈,元素出栈以及遍历所有的栈内元素

1、栈的定义

首先对栈进行定义,构建一个简单的结构体,采用typedef struct 的类型,然后包含栈顶、栈底和栈内元素三个部分

typedef struct{

char data[100];

int top;

int bottom;

}stack;

上述代码表示构建一个名字是stack类型的结构体,包含三个部分。

2、栈的创建

然后是栈的构建,来为栈开辟内存空间,存储我们进行入站出栈的元素。只需在栈操作开始前进行一次栈的构建即可,无需重复。

stack *StackCreate(){

stack *p=(stack*)malloc(sizeof(stack));//分配新空间

if(p==NULL)//分配失败

return 0;

p->bottom=p->top=0;//分配成功

return p;

}

上述代码段为向p内分配内存,成功则返回p

3、入栈

栈构建完毕后就开始进行栈的操作了,首先就是如何将字符、数字等我们想要的内容送入栈中,就需要进行入栈操作。

void StackInput(stack *p,char str){

p->data[p->top]=str;//存入栈中

p->top++;//栈顶指针加1

}

将字符str存入栈中,位置为top,只存在data中,然后栈top++

4、出栈

当我们想要栈顶的元素时,就用到了出栈的操作

char StackOutput(stack *p,char str){

if(p->top!=p->bottom){//栈非空

str=p->data[p->top-1];//栈顶内容输出

p->top--;//栈顶减1

return str;

}

}

因为top位置为栈顶值的下一个,因此将data中top-1的值输出,栈顶top–,返回的值为栈顶元素str

5、栈的遍历

但我们想要输出栈内存储的所有元素,那么就需要使用到遍历

void StackPrint(stack *p){

while(p->top!=p->bottom){

printf("%c",p->data[p->top-1]);

p->top--;

}

}

从栈顶元素开始,直到top==bottom为止,输出其中data存储的元素值

6、例子

下面我们简单看一下压入一个字符和压入字符串的情况

int main(){

char str;

stack *p;//定义栈名

p=StackCreate();//创建栈

StackInput(p,'b');//将字符压入栈中

str=StackOutput(p,str);//取出栈顶内容

printf("%c\n",str);//输出栈顶内容

}

将字符b压入栈中,然后从栈中输出

int main(){

int i;

stack *p;//定义栈名

char a[10]="asdfgh";

p=StackCreate();//创建栈

for(i=0;i

StackInput(p,a[i]);

printf("输出栈中所有字符:\n");

StackPrint(p);

}

7、源代码

给出完整的字符串的栈操作源代码,已经过编译,无BUG

#include

#include

#include

//定义栈

typedef struct{

char data[100];

int top;

int bottom;

}stack;

//创建栈

stack *StackCreate(){

stack *p=(stack*)malloc(sizeof(stack));//分配新空间

if(p==NULL)//分配失败

return 0;

p->bottom=p->top=0;//分配成功

return p;

}

//入栈

void StackInput(stack *p,char str){

p->data[p->top]=str;//存入栈中

p->top++;//栈顶指针加1

}

//出栈

char StackOutput(stack *p,char str){

if(p->top!=p->bottom){//栈非空

str=p->data[p->top-1];//栈顶内容输出

p->top--;//栈顶减1

return str;

}

}

//输出

void StackPrint(stack *p){

while(p->top!=p->bottom){

printf("%c",p->data[p->top-1]);

p->top--;

}

}

//主函数

int main(){

int i;

stack *p;//定义栈名

char a[10]="asdfgh";

p=StackCreate();//创建栈

for(i=0;i

StackInput(p,a[i]);

printf("输出栈中所有字符:\n");

StackPrint(p);

}

大家还有任何疑问,请留言,谢谢。

相关文章

bat365在线登录
长江大学学生请销假办法

长江大学学生请销假办法

📅 06-29 👀 9426
bat365官网登录下载
女生第一次后流血流多久

女生第一次后流血流多久

📅 06-27 👀 3885