一、栈的定义

栈(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语言数据结构-栈的更多相关文章

  1. C语言数据结构-栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-栈的实现-C语言 #define MAXSIZE 100 //栈的存储结构 typedef struct { int* base; //栈底指针 int* top; //栈顶指针 int ...

  2. C语言数据结构----栈与递归

    本节主要说程序中的栈函数栈的关系以及栈和递归算法的关系. 一.函数调用时的栈 1.程序调用时的栈是也就是平时所说的函数栈是数据结构的一种应用,函数调用栈一般是从搞地质向低地址增长的,栈顶为内存的低地址 ...

  3. C语言数据结构----栈的应用(程序的符号匹配检测)

    本节主要讲利用栈来实现一个程序中的成对出现的符号的检测,完成一个类似编译器的符号检测的功能,采用的是链式栈. 一.问题的提出以及解决方法 1.假定有下面一段程序: #include <stdio ...

  4. C语言数据结构----栈的定义及实现

    本节主要说的是数据结构中的栈的基本定义和实现的方式,其中实现的方式采用的是复用顺序表和单向链表的方式. 一.栈的基本定义 1.栈是一种特殊的线性表,只能从固定的方向进出,而且栈进出的基本原则是:先进栈 ...

  5. C语言数据结构栈

    #include<stdio.h>#include<stdlib.h>typedef struct Node{ int data; struct Node* pnext;}no ...

  6. 数据结构——栈(C语言实现)

    #include <stdio.h> #include <stdlib.h> #include<string.h> #include<malloc.h> ...

  7. C语言数据结构之栈:中缀表达式的计算

    *注:本人技术不咋的,就是拿代码出来和大家看看,代码漏洞百出,完全没有优化,主要看气质,是吧 学了数据结构——栈,当然少不了习题.习题中最难的也是最有意思的就是这个中缀表达式的计算了(可以算+-*/和 ...

  8. C++ 泛型 编写的 数据结构 栈

    平时编程里经常需要用到数据结构,比如  栈和队列 等,  为了避免每次用到都需要重新编写的麻烦现将  C++ 编写的 数据结构   栈   记录下来,以备后用. 将 数据结构  栈   用头文件的形式 ...

  9. 数据结构——栈的实现(数组、Java)

    巩固数据结构 栈是一种有限制的线性表 只能对表尾进行操作 package com.shine.test.datastruct; import java.util.Arrays; public clas ...

随机推荐

  1. Unity3D 入门 - 工作区域介绍 与 入门示例

    一. 工作区域详解 1. Scence视图 (场景设计面板) scence视图简介 : 展示创建的游戏对象, 可以对所有的游戏对象进行 移动, 操作 和 放置; -- 示例 : 创建一个球体, 控制摄 ...

  2. .net改善程序性能建议

    对改善程序性能的建议. 文章:https://msdn.microsoft.com/zh-cn/library/ms973838.aspx

  3. AjaxPro怎么用

    AjaxPro是首家支持以各种方式通过javascript访问服务端.net的免费库,类似于SAJAX.它能把Javascript请求发送到.NET方法,服务端传回给Javascript,甚至包括串行 ...

  4. [剑指Offer] 39.平衡二叉树

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. class Solution { public: int Get_Height(TreeNode* root) { if(root == NU ...

  5. dpr dproj 扩展名区别,dprdproj

    这段时间用xe6,看了下目录下生成的一些文件,因为隐藏了扩展名,看到两个名字一样的文件,右键属性看了下,同名但扩展名不同,百度了下区别,没有找到答案,问群里的朋友才知道区别,特此记录下来: dpr:D ...

  6. 【Python】Python中的引用和赋值

    本文转自:http://my.oschina.net/leejun2005/blog/145911 在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针 ...

  7. [luogu1654]OSU!

    update 9.20:本篇题解已经被\(yyb\)证明是出锅的 这道题目最后的式子看上去是很简单的,不到10行就码完了,但是求式子的过程并没有那么简单. 很容易想到一种枚举思路: 因为每一段连续的1 ...

  8. [洛谷P1552][APIO2012]派遣

    题目大意:有一棵$n$个点的树,和一个费用$m$,每个点有一个费用和价值,请选一个点,再从它的子树中选取若干个点,使得那个点的价值乘上选的点的个数最大,要求选的点费用总和小于等于$m$ 题解:树形$d ...

  9. CF498D:Traffic Jams in the Land——题解

    https://vjudge.net/problem/CodeForces-498D http://codeforces.com/problemset/problem/498/D 题面描述: 一些国家 ...

  10. [Leetcode] search for a range 寻找范围

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...