数据结构——链栈(link stack)
/* linkStack.c */
/* 链栈 */ #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> /* 链栈数据结构 */
/*
————————————————
| value | next | <--- top
————————————————
↓
————————————————
| value | next |
————————————————
↓
————————————————
| value | next |
————————————————
*/
typedef struct node {
int data;
struct node *next;
} StackNode; void interface(void);
/* 链栈函数声明 */
StackNode *initializeLinkStack();
bool isEmptyLinkStack(StackNode*);
StackNode *pushLinkStack(StackNode*, int);
StackNode *popLinkStack(StackNode*); /* 程序主函数入口 */
int main(){
StackNode *top = initializeLinkStack();
int flag, num; interface();
for(;;){
printf("Command: ");
scanf("%d", &num);
switch(num){
case : puts("Bye!"); return ; break;
case :
printf("Enter number: ");
scanf("%d", &num);
top = pushLinkStack(top, num);
break;
case :
if(isEmptyLinkStack(top))
printf("Link stack is empty!\n");
else
top = popLinkStack(top);
break;
}
} return ;
} /* 用户界面 */
void interface(void){
puts("+******************************+");
puts("+ 0, quit 退出 +");
puts("+ 1, push 压入 +");
puts("+ 2, pop 弹出 +");
puts("+******************************+");
}
/* 链栈函数实现 */
/* 初始化链栈 */
StackNode *initializeLinkStack(){
StackNode *top = (StackNode*)malloc(sizeof(StackNode));
top = NULL;
return top;
}
/* 链栈是否为空 */
bool isEmptyLinkStack(StackNode* top){
if(top==NULL)
return true;
else
return false;
}
/* 入栈 */
StackNode *pushLinkStack(StackNode *top, int number){
StackNode *s = (StackNode*)malloc(sizeof(StackNode));
s->data = number;
s->next = top;
top = s;
return top;
}
/* 出栈 */
StackNode *popLinkStack(StackNode *top){
int i = top->data;
StackNode *p = top;
top = top->next;
free(p);
printf("Pop: %d\n", i);
return top;
}
数据结构——链栈(link stack)的更多相关文章
- 数据结构 - 链栈的实行(C语言)
数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...
- 数据结构 - 链栈的实现 C++
链栈封装 C++ 使用C++对链栈进行了简单的封装,实现了栈的基本操作 封装方法: pop(),top(),size(),empty(),push() 代码已经过测试 #pragma once #in ...
- C#数据结构-链栈
上一篇我们通过数组结构实现了栈结构(准确的说是栈的顺序存储结构),现在我们通过链(单链)存储栈,也就是链栈. 通常对于正向单链表来说,是从头节点开始,在链的尾部附加节点,前一个节点的指针指向附加节点: ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- Java数据结构之栈(Stack)
1.栈(Stack)的介绍 栈是一个先入后出(FILO:First In Last Out)的有序列表. 栈(Stack)是限制线性表中元素的插入和删除只能在同一端进行的一种特殊线性表. 允许插入和删 ...
- 数据结构之栈(stack)
1,栈的定义 栈:先进后出的数据结构,如下图所示,先进去的数据在底部,最后取出,后进去的数据在顶部,最先被取出. 栈常用操作: s=Stack() 创建栈 s.push(item) 将数据item放在 ...
- 数据结构之栈(stack)的实现
一.栈 1.定义 栈的英文为(stack),是一种数据结构 栈是一个先入后出(FILO-First In Last Out)的有序列表. 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同 ...
- 【图解数据结构】 栈&队列
[TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包 ...
- 数据结构11: 栈(Stack)的概念和应用及C语言实现
栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为“栈顶”, ...
随机推荐
- IOI游记
你竟然点进来了?那你的脑袋可能和我的一样智障QAQ. 啥也没有,闲的没事挖的坑,不要在意,没啥可读的. 权当是一个目标吧(尽管几乎不可能成真),倘若未来(无数年后),我真的站在IOI的赛场上,那我可以 ...
- JDK的小Bug你了解么?
用了这么长时间的JDK了,有没有老铁发现JDK的bug呢?从最早版本的JDK1.2到现在普及开的JDK1.8以来,JAVA经历了这么多年的风风雨雨,依然坚持在一线上,是不是感觉很神奇,但是,有没有多 ...
- GV900 Political Explanation
GV900 Political Explanation, 2017/201830 October, 2018Homework assignment 2Due Week 7 (13 November)W ...
- Java单元测试简述
最开始项目中是没有单元测试的,基本都是自己通过各种方式来实现测试的.比如修改代码,测完再改回来:再比如直接模拟用户操作,直接当黑盒测试,然后自己去看相应的逻辑有没有,状态有没有改变. 这些方式有几个缺 ...
- 在 .NET Core 中使用异步的 ADO.NET 的简单示例
直接贴代码: Program.cs using Microsoft.Extensions.Configuration; using System; using System.Data; using S ...
- JavaScript的闭包特性如何给循环中的对象添加事件(一)
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- array list 的特点及几种遍历方法
public class temp { public static void main(String[] args)throws Exception { //ArrayList 在定义时长度为空 ,在 ...
- 【maven】测试
针对spring-boot项目 通过命令行执行mvn命令来启动测试模块. 1.引入plugin 并自定义参数ignore.test 2.命令行传递参数启动test mvn clean package ...
- 设置 WPF 的全球化语言
https://stackoverflow.com/questions/7454024/setting-culture-en-in-globally-in-wpf-app Thread.Current ...
- Git学习笔记4-分支
参考链接廖雪峰git教程:https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136 1.分支创建 创建本地分支: $ git b ...