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<strlen(a);i++)//将字符串a的字符入栈
StackInput(p,a[i]);
printf("输出栈中所有字符:\n");
StackPrint(p);
}
7、源代码
给出完整的字符串的栈操作源代码,已经过编译,无BUG
#include<stdio.h>
#include<malloc.h>
#include<string.h>
//定义栈
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<strlen(a);i++)//将字符串a的字符入栈
StackInput(p,a[i]);
printf("输出栈中所有字符:\n");
StackPrint(p);
}
大家还有任何疑问,请留言,谢谢。