C语言 数据结构 数组栈 数组

本文档展示了如何使用动态数组实现一个栈,并提供了入栈、出栈等基本操作的C语言代码实现。程序通过循环将0-9依次入栈,然后逐一出栈,验证了栈的后进先出(LIFO)特性。此外,还包含了栈的初始化、元素获取和栈空判断等功能。
摘要由CSDN通过智能技术生成

 可以看做一种特殊的 数组 ,所以我使用第一节实现的 动态数组 来实现栈这种数据结构。当然,栈也可以通过其他方式来实现。因为该栈是通过动态数组实现的,所以称之为 数组栈 。

栈的结构如上图所示,可知栈的基本特性如下:
1. 有 栈顶 和 栈底 两端。
2.入栈 和 出栈 操作只能从 栈顶 进行。
3.后 入栈 的先 出栈 ,即 后进先出(Last In First Out),LIFO 。

程序演示    将0-9分别入栈再出栈

#include<stdio.h>
#include<stdlib.h>  //快速注释多行:Ctrl +K 然后 Ctrl + C  
#include<string.h>      
#define Max 10
typedef int dataType;       //此处必须加分号		
typedef struct mystack      //写一个栈不可能单独处理一种类型的数据
{                           //使用 typedef 为现有类型创建别名,给变量定义一个易于记忆且意义明确的新名字
	int top;
	dataType  *stack; //   int  *stack
}STACK,*LPSTACK;  // LPSTACK 结构体指针


// 初始化栈
LPSTACK initstack()
{

	LPSTACK  mytempstack=(LPSTACK) malloc (sizeof(STACK));  //结构体指针  创建一个栈

	// 数据成员初始化 分配内存
	mytempstack->stack =(dataType*)malloc(sizeof(dataType)*Max);
	mytempstack->top =-1;  // 不能使用.   结构体变量用 . 运算符来访问结构体的成员
	                       // 指向结构体的指针用->来访问其指向的结构体的成员
	return mytempstack;    //可以使用 memset()函数初始化 也可以不初始化
}


//入栈操作函数
void push(LPSTACK mytempstack  ,dataType  data)  //入的哪一个栈 入的哪一个数据
{

	if(mytempstack->top  >=  Max)
	{
		printf("栈满,无法入栈\n");
		return  ;//结束函数 return是使整个函数返回 当然可以用return中断程序。
	}
	else
	{
	    mytempstack->stack [++mytempstack->top]=data;    //stack是指针
	    printf("入栈数字为%d\n",data);
	}
}



// 出栈操作函数
void pop(LPSTACK mytempstack)
{

	if(mytempstack->top ==-1)
	{
		printf("栈空,无法出栈");
		return  ;//结束函数 return是使整个函数返回 当然可以用return中断程序。
	}


	else
		//mytempstack->stack [--mytempstack->top];    //stack是指针
		--mytempstack->top;
}



// 获取元素
dataType getTop(LPSTACK mytempstack)
{
	return mytempstack->stack [mytempstack->top];
}



//判断栈是否空了
int  isEmpty(LPSTACK mytempstack)
{
	if(mytempstack->top ==-1)
		return 1;
	else
		return 0;
}


int main()
{
	int i=0;
	LPSTACK mystack1=initstack();
	/*push(mystack1,1);
	push(mystack1,4);
	push(mystack1,5);
	push(mystack1,6);*/
	for(i=0;i<10;i++)
		push(mystack1,i);
	while(!isEmpty(mystack1))
	{

		printf("从栈弹出的数据是%d\n",getTop(mystack1));
	    pop(mystack1);
	}
	system("pause");
	return 0;
}

调试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love coldplay

你的鼓励,将让我持续更新

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值