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<strlen(a);i++)//将字符串a的字符⼊栈
StackInput(p,a[i]);
printf("输出栈中所有字符:\n");
StackPrint(p);
}
7、源代码
c语言char的用法给出完整的字符串的栈操作源代码,已经过编译,⽆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);
}
⼤家还有任何疑问,请留⾔,谢谢。