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、源代码

给出完整的字符串的栈操作源代码,已经过编译,无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);
}


在这里插入图片描述
大家还有任何疑问,请留言,谢谢。

  • 192
    点赞
  • 874
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值