C语言怎么用顺序表输出栈的长度,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

#include

#include

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语言 #define MAXSIZE 100 //栈的存储结构 typedef struct { int* base; //栈底指针 int* top; //栈顶指针 int ...

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

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

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

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

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

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

C语言数据结构栈

#include#includetypedef struct Node{ int data; struct Node* pnext;}no ...

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

#include #include #include #include ...

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

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

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

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

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

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

随机推荐

Python更换国内源实现快速PIP安装

WINDOWS 安装pip 1.首先下载安装Python,并将python的安装目录添加进系统环境变量 2.复制这个文件保存为.py并执行 https://bootstrap.pypa.io/get- ...

上下问语句句柄Release地方

OCI--在QUERY中 CLI--在FETCH中 在父类中定义了public—Release和protected—Release,protected—Release在public—Release中被 ...

php优化代码技巧

1. 如果一个方法可静态化,就对它做静态声明.速率可提升至 4 倍. 2. echo 比 print 快. 3. 使用 echo 的多重参数(译注:指用逗号而不是句点)代替字符串连接. 4. 在执行 ...

selenium+谷歌无头浏览器爬取网易新闻国内板块

网页分析 首先来看下要爬取的网站的页面 查看网页源代码:你会发现它是由js动态加载显示的 所以采用selenium+谷歌无头浏览器来爬取它 1 加载网站,并拖动到底,发现其还有个加载更多 2 模拟点击 ...

sql server按月份,按项目号展开表格

原始数据: 01 RD21 6495.411402 RD21 87.43604 RD21 101.718405 RD21 1.538401 RD25 7803.303709 RD25 106.8375 ...

es6学习日记5-对象的扩展

属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz // {foo: &q ...

[20180612]删除bootstrap$记录无法启动.txt

[20180612]删除bootstrap$记录无法启动.txt --//前几天看链接http://www.xifenfei.com/2018/05/willfully-delete-bootstra ...

服务检测sh脚本

如mysql cat check_mysql.sh #!/bin/bash servicename="mysqld"showname="mysql" pid=& ...

kvm和qemu的关系

KVM (Kernel Virtual Machine) is a Linux kernel module that allows a user space program to utilize th ...

汇编Shellcode的技巧

汇编Shellcode的技巧 来源  https://www.4hou.com/technology/3893.html 本文参考来源于pentest 我们在上一篇提到要要自定义shellcode,不 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值