Linux c 算法与数据结构--栈
前段时间写了双向链表,现在写个栈,写之前,先简单介绍链表 队列 栈的区别:
链表,队列,堆栈的区别
1、栈是个有底的口袋,像袜子。
队列是没底的口袋,像通心粉。
所以:栈的特点是先进后出,队列的特点是先进先出。
2、主要区别是适用的地方不一样,
链表实际上可以认为是一种数据的物理组织形式,是用指针或对象的引用组织起的一种数据的存储方式.
队列和堆栈是一个更高层次的概念,其底层可以是用链表也可以是用数组来实现.
队列和堆栈的主要区别是进出的顺序不一样,
队列是先进先出,堆栈是后进先出.
3、cooled(经典中--经过非典中) 说的很详细了,我补充一下
队列和堆栈是一种特殊的数据组织形式。
可以把他们看成是一系列的集合。
队列可以看成是有2个口的集合一个口叫队头一个叫队尾,只能在对头进行删除操作,在队尾做插入。根据这样的操作。队列特点是先进先出
堆栈可以看成是有1个口的集合,这个口叫栈顶。插入和删除操作只能在栈顶操作。根据这样的操作。堆栈的特点是是后进先出.
链表是一种存储方式,它可以在非连续的内存空间里面存储一个集合的元素。和它对应的是数组,数组要在连续的空间里存储集合的元素
下面是栈的实验代码:
Stack.h
- #ifndef _Stack_H
- #define _Stack_H
- typedef struct node
- {
- int data;
- struct node *down;
- }PNode;
- typedef struct stack
- {
- PNode *top;
- int size;
- }Stack;
- Stack *InitStack();
- void DestroyStack(Stack *ps);
- void ClearStack(Stack *ps);
- int IsEmpty(Stack *ps);
- int GetSize(Stack *ps);
- PNode *GetTop(Stack *ps,int *pitem);
- PNode *Push(Stack *ps,int item);
- PNode *Pop(Stack *ps,int *pitem);
- void StackTraverse(Stack *ps,void (*visit)());
- #endif
Stack.c
- #include <stdio.h>
- #include "Stack.h"
- #include <malloc.h>
- #include <stdlib.h>
- Stack *InitStack()
- {
- Stack *ps;
- ps=(Stack *)malloc(sizeof(Stack));
- if(ps!=NULL)
- {
- ps->top = NULL;
- ps->size = 0;
- }
- return ps;
- }
- void DestroyStack(Stack *ps)
- {
- if(IsEmpty(ps)!=1)
- ClearStack(ps);
- free(ps);
- }
- void ClearStack(Stack *ps)
- {
- while(IsEmpty(ps)!=1)
- {
- Pop(ps,NULL);
- }
- }
- int IsEmpty(Stack *ps)
- {
- if(ps->top == NULL&&ps->size == 0)
- return 1;
- }
- int GetSize(Stack *ps)
- {
- return ps->size;
- }
- PNode *GetTop(Stack *ps,int *pitem)
- {
- if(IsEmpty(ps)!=1&&pitem!=NULL)
- {
- *pitem = ps->top->data;
- }
- return ps->top;
- }
- PNode *Push(Stack *ps,int item)
- {
- PNode *pnode = (PNode *)malloc(sizeof(PNode));
- if(pnode!=NULL)
- {
- pnode->data = item;
- pnode->down = GetTop(ps,NULL);
- ps->size++;
- ps->top = pnode;
- }
- return pnode;
- }
- PNode *Pop(Stack *ps,int *pitem)
- {
- PNode *pnode = ps->top;
- if(IsEmpty(ps)!=1&&pnode!=NULL)
- {
- if(pitem!=NULL)
- *pitem = pnode->data;
- ps->size--;
- ps->top = ps->top->down;
- free(pnode);
- }
- return ps->top;
- }
- void StackTraverse(Stack *ps,void(*visit)())
- {
- PNode *p = ps->top;
- int i = ps->size;
- while(i--)
- {
- visit(p->data);
- p = p->down;
- }
- }
Test.c
- #include "Stack.h"
- #include <stdio.h>
- void print(int i)
- {
- printf("The data of this node is:%d\n",i);
- }
- int main()
- {
- Stack *ps = InitStack();
- int i,item;
- printf("0-9 push in stack,and print:\n");
- for(i=0;i<10;i++)
- {
- Push(ps,i);
- GetTop(ps,&item);
- printf("%d",item);
- }
- printf("\nTraverse from stacktop to stack down and print\n");
- StackTraverse(ps,print);
- printf("The data of stack pop as it's turn and print:\n");
- for(i=0;i<10;i++)
- {
- Pop(ps,&item);
- printf("%d",item);
- }
- ClearStack(ps);
- if(IsEmpty(ps))
- printf("\nIt is a success to clear the stack\n");
- DestroyStack(ps);
- printf("The stack is destroyed!\n");
- }
执行结果如下:
makefile:
Linux c 算法与数据结构--栈相关推荐
- 算法与数据结构 -- 栈与队列(四)
栈与队列定义了数据的操作 一.栈 栈是一种先入先出的数据结构.可以用顺序表实现,也可以用链表实现 栈操作 判断是否为空 压栈.入栈push 出栈 pop 返回栈顶元素 peek 栈的元素个数 # co ...
- Linux c 算法与数据结构--双向链表
链表是linux c中非常重要的数据结构,双向链表与单向链表的区别,是它每个节点有两个指针域,分别指向该节点的前一个节点与后一个节点: 而链表的操作主要是查询.插入.删除.遍历等,下面来看一个双向链表 ...
- Linux C 算法与数据结构 --二叉树
头文件BiTree.h [cpp] view plaincopy typedef int Item; typedef struct node { struct node * lchild; struc ...
- 【算法入门必刷】数据结构-栈(一)
[牛客网面试入门必刷]算法入门-数据结构-栈(一) 前言 算法入门刷题训练 题一:AB1 [模板]栈 题目分析 理论准备 题解 小结
- 猿创征文|【算法入门必刷】数据结构-栈(二)
[算法入门必刷]算法入门-数据结构-栈(二) 前言 算法入门刷题训练 题目AB2: 栈的压入.弹出序列 题目分析 理论准备 题解 小结
- 猿创征文 |【算法入门必刷】数据结构-栈(三)
[算法入门必刷]算法入门-数据结构-栈(三) 前言 算法入门刷题训练 题目AB3:有效括号序列 题目分析 理论准备 题解 小结
- 猿创征文 |【算法入门必刷】数据结构-栈(四)
[算法入门必刷]算法入门-数据结构-栈(四) 前言 算法入门刷题训练 AB4:逆波兰表达式求值 题目分析 理论准备 题解 小结
- Caché 算法与数据结构
第一章 Caché 算法与数据结构 基础和概念 ☆☆☆☆☆ 第二章 Caché 算法与数据结构 数组原理 ☆☆☆☆☆ 第三章 Caché 算法与数据结构 链表原理 ☆☆☆☆☆ 第四章 Caché 算法 ...
- linux 复制栈数据结构,算法-数据结构-堆栈
算法-数据结构-堆栈 发布时间:2005-09-09 17:46:22来源:红联作者:frog /*************************************************** ...
- 队列的基本操作_算法与数据结构(五) 栈和队列
? 工欲善其事,必先利其器. 栈和队列 - Stack And Queue 栈 如何理解栈呢? 后进者先出,先进者后出,这就是典型的 "栈" 结构. 04_栈和队列-栈结构 从栈的 ...
最新文章
- 明年,我要用 AI 给全村写对联
- Linux Centos7安装chrome浏览器
- mysql编辑工具wf_轻松构建自定义WF设计器
- VC++中把一个对话框最小化到托盘
- RSA加密解密及数字签名Java实现--转
- 2020癌症大数据分析,哪些癌症最要命?
- C语言切割多层字符串(strtok_r strtok使用方法)
- sql如何先排序再去重
- java sox语音_Sox语音转换的相关知识
- 十七、PHP框架Laravel学习笔记——模型的定义
- 人工智能能够构建一个自主驱动云吗?
- 帆软动态分页之单数据集行式报表(模板-引擎设设置启用及行数)
- itextPdf pdf加水印
- 浅谈Android中的MVP架构
- OVF 和 OVA 文件格式和模板的区别
- stylus -w style.styl -o style.css
- 【ubuntu】The following signatures couldn‘t be verified because the public key is not available
- vue3 provide 与 inject 用法
- GSoC 从开始到中选
- 【评测】一种组织蛋白快速提取方法
热门文章
- magento去除子分类的url地址中带有父分类的url key
- 女人必知:10个好习惯 让老公不想出轨
- 是什么使波西米亚狂想曲成为杰作-数据科学视角
- 贝叶斯统计 传统统计_统计贝叶斯如何补充常客
- leetcode 1631. 最小体力消耗路径(并查集)
- Bootstrap 4:如何使顶部固定的Navbar保持在容器中而不拉伸?
- react 中渲染html_如何在React中识别和解决浪费的渲染
- rails 共享变量_如何将Rails实例变量传递给Vue组件
- 真实感人故事_您的数据可以告诉您真实故事吗?
- 微服务框架---搭建 go-micro环境