栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构之栈篇

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构之栈篇

线性结构的常见应用之一 栈 定义:

一种可以实现“先进后出”的存储结构

分类:

静态栈(数组实现)、动态栈(链表实现);

算法:
  1. 进栈
  2. 出栈
应用:
  1. 函数调用(函数的地址和参数信息作为个体压入栈)
  2. 中断
  3. 生产者与消费者例子;生产者实现进栈、消费者实现出栈。
  4. 表达式求值(两个栈实现,一个为存数据的栈,一个为存预算符的栈)
  5. 走迷宫
代码——栈
#include 
#include 
#include  

//函数(包括主函数)静态、局部变量内存是在栈内分配的(操作系统来实现分配);动态内存分配是在堆内分配(malloc) ,动态内存分配需要程序员手动分配 

typedef struct Node{
	int data;
	struct Node * pNext;
} NODE,* PNODE;
typedef struct Stack{
	PNODE pTOP;
	PNODE pBottom;
}STACK,* PSTACK;

//函数声明
void Init(PSTACK Sp); //生成有效栈,并且初始化 
void Push(PSTACK Sp,int val); //入栈 
void Traveres_stack(PSTACK Sp); //遍历栈 
bool Pop(PSTACK Sp, int * p_dVal);//出栈 
bool Clear_stack(PSTACK Sp);
bool Destroy(PSTACK Sp); 
//主函数 
int main(int argc, char** argv) {
	STACK S; //STACK等价于struct Stack,备注此时并未S真正表示有效栈,需要初始化处理 
	Init(&S);
	Push(&S,1); 
	Push(&S,2); 
	Push(&S,3);
	Traveres_stack(&S); 
	Clear_stack(&S); 
	Traveres_stack(&S); 
	return 0;
}

//辅助函数 
void Init(PSTACK Sp){
	PNODE p=(PNODE)malloc(sizeof(NODE));
	if(p == NULL){
	printf("堆内存分配失败n") ;
	exit;
	}
	p->pNext=NULL;
	Sp->pBottom = p;
	Sp->pTOP = p;	 
}
void Push(PSTACK Sp,int val){
	PNODE p = (PNODE)malloc(sizeof(NODE));
	if(p == NULL){
	printf("堆内存分配失败n") ;
	exit;
	}
	p->data= val;
	p->pNext= Sp->pTOP;
	Sp->pTOP = p; 
}
void Traveres_stack(PSTACK Sp){
	PNODE tp = Sp->pTOP;
	printf("遍历栈:"); 
	while(tp!=Sp->pBottom){
		printf("%d,",tp->data);
		tp=tp->pNext;
	} 
	printf("n"); 
}
bool Is_empty(PSTACK Sp){
	if(Sp->pBottom == Sp->pTOP)
	return true;
	else
	return false;
}
//把Sp栈出栈一次,并把出栈元素 保存在dVal中,如果出栈为空,返回false;
bool Pop(PSTACK Sp, int * p_dVal){
	if(Is_empty(Sp)){
		printf("栈为空!n");
		return false;
	}else{
		PNODE tmp=Sp->pTOP;
		Sp->pTOP=Sp->pTOP->pNext;
		*p_dVal=tmp->data;
		free(tmp);
		return true;
	}
} 
bool Clear_stack(PSTACK Sp){
	PNODE tmp = NULL;
	while(Sp->pTOP!=Sp->pBottom){
		tmp=Sp->pTOP;
		Sp->pTOP=Sp->pTOP->pNext;
		free(tmp); 
	}
} 
bool Destroy(PSTACK Sp){
	Clear_stack(Sp);
	free(Sp->pTOP);
	Sp->pBottom=NULL;
	Sp->pTOP=NULL;
	return true;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号