一、栈的定义

栈(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. 解读:未来30年新兴科技趋势报告(AI Frist,IoT Second)

    前段时间美国公布的一份长达35页的<未来30年新兴科技趋势报告>.该报告是在美国过去五年内由政府机构.咨询机构.智囊团.科研机构等发表的32份科技趋势相关研究调查报告的基础上提炼形成的. ...

  2. Python中package的导入语法

    在Python中,一个目录被称为一个package.import和from语法除了导入module文件之外,还可以导入package,语法如下: # import语法 import dir1.dir2 ...

  3. 课堂练习之找数字0-N中“1”出现的次数

    一.题目与要求 题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求:1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12) ...

  4. 【android】实现手指滑动来切换activity(转)

    http://code.eoe.cn/115 1.jpg外部引用 原始文档 MainActivity.java外部引用 原始文档 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  5. Khan Academy

    Khan Academy是一个免费的学院. 致力于教育改革. 百度百科:ohn Resig 百度百科有记者采访,采访内容比较有意思.

  6. OSG数学基础:坐标系变换

    三维实体对象需要经过一系列的坐标变换才能正确.真实地显示在屏幕上.在一个场景中,当读者对场景中的物体进行各种变换及相关操作时,坐标系变换是非常频繁的. 坐标系变换通常包括:世界坐标系-物体坐标系变换. ...

  7. BZOJ5321 & 洛谷4064 & LOJ2274:[JXOI2017]加法——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5321 https://www.luogu.org/problemnew/show/P4064 ht ...

  8. BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...

  9. 洛谷1578:[WC2002]奶牛浴场——题解

    https://www.luogu.org/problemnew/show/P1578#sub 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建 ...

  10. 洛谷 P2657 [SCOI2009]windy数 解题报告

    P2657 [SCOI2009]windy数 题目描述 \(\tt{windy}\)定义了一种\(\tt{windy}\)数.不含前导零且相邻两个数字之差至少为\(2\)的正整数被称为\(\tt{wi ...