数据结构——栈的实现及应用

本贴最后更新于 3003 天前,其中的信息可能已经沧海桑田

一、何为栈?
     栈,是一种线性表的变形,它是一种特殊的线性表。特殊之处是栈的数据插入和删除操作只允许在表尾(或表头,这要看如何实现)。
二、栈的实现
     栈的基本操作:1.创建一个空栈 2.判空 3.出栈 4.入栈 5.查看长度 6.仅获得栈顶数据
实现代码:

/*
 *File Name:    StackData.h
 *Author Name:  Dronsure
 *Create Time:  Sat Sep 19 20:39:42 2015
 */

/*
若要自定义数据结构体,请修改 StackData.h StackData.c
/
#ifndef STACKDATA_H
#define STACKDATA_H
typedef struct
{
int data;
} ElementType; //自定义数据结构体
void VoluationElementTypeData(ElementType
dataDest,ElementType dataSource); //自定义数据结构体赋值函数
ElementType InputElementTypeData(); //自定义数据结构体输入函数
void PrintElementTypeData(ElementType data); //输出自定义数据结构体数据函数
#endif /
STACKDATA_H */

/*
*File Name: StackData.c
*Author Name: Dronsure
*Create Time: Sat Sep 19 20:47:25 2015
*/

/*
*若要自定义数据结构体,请修改 StackData.h StackData.c
*/

#include "StackData.h"
#include <stdio.h>
void VoluationElementTypeData(ElementType* dataDest, ElementType dataSource)
{
dataDest->data = dataSource.data;
}
ElementType InputElementTypeData()
{
ElementType tmpData;
printf("Please input data: \n");
scanf("%d",&tmpData.data);
return tmpData;
}
void PrintElementTypeData(ElementType dataSource)
{
printf("The data is :%d\n",dataSource.data);
}

/*
*File Name: Stack.h
*Author Name: Dronsure
*Create Time: Fri Sep 18 21:08:09 2015
*/
#include "StackData.h"
#ifndef STACK_H
#define STACK_H
typedef struct Node
{
ElementType data;
struct Node *next;
struct Node *previous;
} Stack, StackNode; //数据结点
Stack CreateStack(); //创建一个栈
char isEmpty(Stack stackIns); //判断栈是否为空
ElementType pop(Stack stackIns); //出栈
void push(Stack stackIns, ElementType dataSource); //入栈
#endif /
STACK_H */

/*
*File Name: Stack.c
*Author Name: Dronsure
*Create Time: Fri Sep 18 21:03:17 2015
/
#include "Stack.h"
#include <malloc.h>
Stack CreateStack()
{
Stack head = NULL;
head = (StackNode
)malloc(sizeof(StackNode));
head->next = NULL;
return head;
}
char isEmpty(Stack stackIns)
{
return stackIns->next == NULL;
}
void push(Stack stackIns, ElementType dataSource)
{
StackNode *p = stackIns;
StackNode *tmp;
while(p->next != NULL)
p = p->next;
tmp =(StackNode ) malloc(sizeof(StackNode));
VoluationElementTypeData(&tmp->data,dataSource);
tmp->next = NULL;
tmp->previous = p;
p->next = tmp;
}
ElementType pop(Stack stackIns)
{
StackNode
p = stackIns;
ElementType tmp;
while(p->next != NULL)
p = p->next;
p->previous->next = NULL;
VoluationElementTypeData(&tmp, p->data);
free(p);
return tmp;
}

/*
*File Name: main.c
*Author Name: Dronsure
*Create Time: Fri Sep 18 20:46:49 2015
/
#include <stdio.h>
#include "Stack.h"
int main(int argc, char
argv[])
{
Stack stackIns;
stackIns = CreateStack();
printf("%d\n",isEmpty(stackIns));
push(stackIns, InputElementTypeData());
printf("%d\n",isEmpty(stackIns));
push(stackIns, InputElementTypeData());
PrintElementTypeData(pop(stackIns));
PrintElementTypeData(pop(stackIns));
printf("%d\n",isEmpty(stackIns));
return 0;
}

 

  • 数据结构
    87 引用 • 115 回帖 • 4 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 47 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 405 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1425 引用 • 10043 回帖 • 473 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1398 回帖 • 1 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 8 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 28 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    273 引用 • 679 回帖 • 1 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 85 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 36 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    205 引用 • 357 回帖 • 1 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖 • 1 关注
  • 安全

    安全永远都不是一个小问题。

    189 引用 • 813 回帖 • 3 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 642 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖 • 2 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 372 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 22 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 3 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 421 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 602 关注
  • sts
    2 引用 • 2 回帖 • 147 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 399 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 605 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 17 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖 • 1 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 618 关注