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 ...
随机推荐
- 寒假作业end
开始写博客的个人体会 自己打的链表过不了,果然,心存侥幸是不行的,被揪出来也不错,很感谢畅畅酱. 学术诚信的重要性 爱因斯坦说过:"大多数人说是才智造就了伟大的科学家,他们错了,是人格.&q ...
- iOS开发本地通知
/* 本地通知:不通过网络,在本地实现的通知,自己发给自己 远程通知:必须通过网络,使用推送技术(APNs),实现通知 本地通知: 1.要完成可以接收的通知形式的注册 2.具体通知的设置 3.发送通知 ...
- OSG配置捷径,VS2013+WIN10
在自己电脑上用CMAKE已经编译好了,上传到百度云里面了. 环境是WIN10+VS2013. 链接:http://pan.baidu.com/s/1hrO7GFE 密码:fwkw 解压之后放在C盘或者 ...
- eclipse 创建并运行maven web项目
这两天想在eclipse上运行maven web项目,折腾了许久,总算success啦. 1,利用eclipse创建dynamic web project(eclipse需要安装m2eclipse). ...
- PowerMock用法[转]
转:http://agiledon.github.io/blog/2013/11/21/play-trick-with-powermock/ 当我们面对一个遗留系统时,常见的问题是没有测试.正如Mic ...
- maven Tomcat idea 热部署
1.首先得有maven项目 2.配置tomcat,可以访问页面管理项目 修改: /conf/tomcat-users.xml <role rolename="manager-gui&q ...
- C# 中的语法糖
1. using 代替了 try-catch-finally 因为之前是学 Java 的,在连接数据库或者进行文件读写操作时很自然的就使用了 try-catch-finally-,在 C# 中这样 ...
- mac快速安装程序
homebrew:mac套件管理 官网 :http://brew.sh/index_zh-cn.html macport: 官网:https://www.macports.org/
- vdbench和fio测试磁盘性能的对比总结
一.安装 1.安装vdbench,首先安装java:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...
- CentOS7 从查看、启动、停止服务说起systemctl
执行命令“systemctl status 服务名.service”可查看服务的运行状态,其中服务名后的.service 可以省略,这是CenOS7以后采用systemd作为初始化进程后产生的变化. ...