C语言数据结构-栈
一、栈的定义
栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、
移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。
二、代码实现
// main.c
// C 语言-栈
//
// Created by rimi on 2017/5/22.
// Copyright © 2017年 rimi. All rights reserved.
// #include <stdio.h>
#include<stdlib.h>
#include<stdbool.h>
struct Data{//因为两个相邻之间的关系需要维护
int i;
struct Data * next; }; struct Stack{
struct Data *pTop;//栈顶指针
struct Data *pBottom;//栈底指针
int maxNumber;//栈里面最多放几个元素
int currentNumber;//栈当前元素个数 };
struct Data * newData();//初始化一个Date
struct Stack * initStack();//初始化一个栈
bool push(struct Stack * stack,struct Data *data);//压栈、进栈
void pop(struct Stack * stack);//出栈
void traverse(struct Stack * stack);//遍历栈里面的所有元素
bool isEmpty(struct Stack * stack);
bool isFull(struct Stack * stack); int main(int argc, const char * argv[]) {
struct Stack * stack=initStack();
while (push(stack,newData() )){
}
traverse(stack);
pop(stack);
pop(stack);
pop(stack);
traverse(stack);
return ;
}
//初始化一个data
struct Data * newData(){
struct Data * data=(struct Data *)malloc (sizeof(struct Data));
data->next=NULL;
printf("请输入一个元素值(一个整数):");
scanf("%d",&data->i);
return data; }
//初始化一个栈
struct Stack * initStack(int max){
struct Stack * stack=(struct Stack *)malloc (sizeof(struct Stack));
stack->pTop=NULL;
stack->pBottom=NULL;
stack->maxNumber=max;
stack->currentNumber=;
return stack; }
//判断是否为满(为满返回true,不为满false)
bool isFull(struct Stack * stack){
if(stack ->currentNumber ==stack->maxNumber) { return true; }
return false;
} //压栈、进栈
bool push (struct Stack * stack,struct Data *data){
if(isFull(stack)){
printf("栈已满了");
return false; }
if(data ->i==-){
return false;
}
if(stack->pTop== NULL && stack ->pBottom ==NULL){ stack ->pTop=data;
stack->pBottom=data;
}else{
data->next=stack->pTop;
stack->pTop=data;
}
stack->currentNumber++;
return true;
}
//判断是否为空
bool isEmpty(struct Stack * stack){
if(stack ->pBottom == NULL && stack ->pTop ==NULL) {
return true;
}
return false;
} //弹出栈顶元素
void pop (struct Stack * stack){
if(!isEmpty(stack)) {
struct Data *data=(stack )->pTop;
printf("元素:%d 出栈 \n",data->i);
stack->pTop = stack ->pTop->next;
free(data); } }
//遍历打印栈中的元素
void traverse (struct Stack *stack){
printf("=================== \n");
int index=;
struct Data * temp =stack ->pTop;
while(temp !=NULL){
printf("第%d个输出的元素是:%d \n",++index,temp->i);
temp = temp->next;
}
printf("=================== \n");
}
C语言数据结构-栈的更多相关文章
- C语言数据结构-栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作
1.数据结构-栈的实现-C语言 #define MAXSIZE 100 //栈的存储结构 typedef struct { int* base; //栈底指针 int* top; //栈顶指针 int ...
- C语言数据结构----栈与递归
本节主要说程序中的栈函数栈的关系以及栈和递归算法的关系. 一.函数调用时的栈 1.程序调用时的栈是也就是平时所说的函数栈是数据结构的一种应用,函数调用栈一般是从搞地质向低地址增长的,栈顶为内存的低地址 ...
- C语言数据结构----栈的应用(程序的符号匹配检测)
本节主要讲利用栈来实现一个程序中的成对出现的符号的检测,完成一个类似编译器的符号检测的功能,采用的是链式栈. 一.问题的提出以及解决方法 1.假定有下面一段程序: #include <stdio ...
- C语言数据结构----栈的定义及实现
本节主要说的是数据结构中的栈的基本定义和实现的方式,其中实现的方式采用的是复用顺序表和单向链表的方式. 一.栈的基本定义 1.栈是一种特殊的线性表,只能从固定的方向进出,而且栈进出的基本原则是:先进栈 ...
- C语言数据结构栈
#include<stdio.h>#include<stdlib.h>typedef struct Node{ int data; struct Node* pnext;}no ...
- 数据结构——栈(C语言实现)
#include <stdio.h> #include <stdlib.h> #include<string.h> #include<malloc.h> ...
- C语言数据结构之栈:中缀表达式的计算
*注:本人技术不咋的,就是拿代码出来和大家看看,代码漏洞百出,完全没有优化,主要看气质,是吧 学了数据结构——栈,当然少不了习题.习题中最难的也是最有意思的就是这个中缀表达式的计算了(可以算+-*/和 ...
- C++ 泛型 编写的 数据结构 栈
平时编程里经常需要用到数据结构,比如 栈和队列 等, 为了避免每次用到都需要重新编写的麻烦现将 C++ 编写的 数据结构 栈 记录下来,以备后用. 将 数据结构 栈 用头文件的形式 ...
- 数据结构——栈的实现(数组、Java)
巩固数据结构 栈是一种有限制的线性表 只能对表尾进行操作 package com.shine.test.datastruct; import java.util.Arrays; public clas ...
随机推荐
- Discover the Web(栈模拟)
Description Standard web browsers contain features to move backward and forward among the pages rece ...
- Thunder团队——文案+美工
团队名称:Thunder 组长:王航 成员:李传康.代秋彤.邹双黛.苗威.宋雨.胡佑蓉.杨梓瑞 项目名称:爱阅app 需求概述: 现在市面上有很多手机阅读器,但是基本上不是收费就是广告满天飞.基于这种 ...
- C#中委托的发展与匿名函数
匿名函数(C# 编程指南) 匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用. 可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. 共有两种匿名函数 ...
- (十一)instanceof 和 getclass 的区别
判断两个对象是否为同一类型,时常用到getclass 和 instanceof ,而这两个函数又是时常让人混淆.下面从一个例子说明两者的区别: public class Test_drive { pu ...
- HDU 2068 Choose the best route
http://acm.hdu.edu.cn/showproblem.php?pid=2680 Problem Description One day , Kiki wants to visit one ...
- python redis插件安装
#tar xvzf redis-py-2.2.1.tar.gz #cd redis-py-2.2.1 #python setup.py install 附件: https://app.yinxia ...
- oracle 时间段内的所有行时间
获取一段时间内所有的小时 SELECT to_date('2013-07-01 12', 'yyyy-mm-dd hh24') + (ROWNUM - 1) / 24 sdate FROM dualC ...
- MySQL event调度
基本命令 //查看事件调度是否开启 show variables like '%event_scheduler%'; //开启事件调度 SET GLOBAL event_scheduler = ON; ...
- [OS] 操作系统常考知识点
转自:http://jennica.space/2017/03/21/os-principle/ 大纲如下: 1.操作系统概述2.操作系统运行环境3.进程线程模型4.处理器调度5.同步机制6.存储模型 ...
- html5 isPointInPath相关操作
<body> <canvas id="> </canvas> <script type="text/javascript"> ...