C语言数据结构-栈

时间:2022-09-06 19:08:38

一、栈的定义

栈(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&plus;&plus; 泛型 编写的 数据结构 栈

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

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

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

随机推荐

  1. Newtonsoft&period;Json高级用法

    http://blog.csdn.net/chengmodelong/article/details/46680143

  2. javascript 值类型与引用类型

    写的比较简单哈,只是用来记忆下 (1)值类型:undefined.null.Boolean.Number和String (2)引用类型:对象.数组.函数

  3. bash获取properties文件资源

    #!/bin/sh prop_value="" function getProperty() { file=$ prop_key=$ prop_value=`cat $file | ...

  4. php 升级到 5&period;3&plus; 后出现的一些错误,如 ereg&lpar;&rpar;&semi; ereg&lowbar;replace&lpar;&rpar;&semi; 函数报错

    在php5.3环境下运行,常常会出现 Deprecated: Function ereg() is deprecated in...和Deprecated: Function ereg_replace ...

  5. Python 练习册

    01:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果 [图像处理] 类似于图中效果: py 2.7代码: from PIL import Image, Im ...

  6. H5制作1--母亲节快乐

    H5作品现在很流行额. 早上起的很早.就自己试着去了解了一下.感觉很easy. 用了百度的H5在线制作工具.感觉很easy.顺便给百度做下推广吧.h5.baidu.com 于是就有了自己的第一个dem ...

  7. 在C中嵌入汇编

    早前公布了C和汇编混编的温度控制器程序,收到一些朋友的询问,他们无法在自己程序中使用我的18B20的汇编子程序或无法正常通过混编后的程序编译. 其实在KEIL中嵌入汇编的方法很简单.如图一,在C文件中 ...

  8. Remastersys备份linux系统ISO镜像

    1. 安装Remastersys 利用Ubuntu Software Center安装,修改sources.list文件,在文件末尾加入下面三行,添加软件源, #Rsudo remastersys d ...

  9. &ast;&ast;&ast; target pattern contains no &grave;&percnt;&&num;39&semi;&period; Stop&period;

    windows上的ndk工程移到linux下编译就报这个错, 解决方法,把jni目录下obj目录删除,重新编译就好了

  10. 关于flex布局兼容

    (做个记录) 一.W3C各个版本的flex 2009 version 标志:display: box; or a property that is box-{*} (eg. box-pack) 201 ...