Linux c 算法与数据结构--栈

前段时间写了双向链表,现在写个栈,写之前,先简单介绍链表 队列  栈的区别:

链表,队列,堆栈的区别
1、栈是个有底的口袋,像袜子。
队列是没底的口袋,像通心粉。
所以:栈的特点是先进后出,队列的特点是先进先出。
2、主要区别是适用的地方不一样,   
  链表实际上可以认为是一种数据的物理组织形式,是用指针或对象的引用组织起的一种数据的存储方式.   
  队列和堆栈是一个更高层次的概念,其底层可以是用链表也可以是用数组来实现.   
  队列和堆栈的主要区别是进出的顺序不一样,   
  队列是先进先出,堆栈是后进先出.   
3、cooled(经典中--经过非典中)   说的很详细了,我补充一下   
  队列和堆栈是一种特殊的数据组织形式。   
  可以把他们看成是一系列的集合。   
  队列可以看成是有2个口的集合一个口叫队头一个叫队尾,只能在对头进行删除操作,在队尾做插入。根据这样的操作。队列特点是先进先出   
  堆栈可以看成是有1个口的集合,这个口叫栈顶。插入和删除操作只能在栈顶操作。根据这样的操作。堆栈的特点是是后进先出.   
  链表是一种存储方式,它可以在非连续的内存空间里面存储一个集合的元素。和它对应的是数组,数组要在连续的空间里存储集合的元素


下面是栈的实验代码:

Stack.h

[cpp] view plaincopy
  1. #ifndef _Stack_H  
  2. #define _Stack_H  
  3.   
  4. typedef struct node  
  5. {  
  6.     int data;  
  7.     struct node *down;  
  8. }PNode;  
  9.   
  10. typedef struct stack  
  11. {  
  12.     PNode *top;  
  13.     int size;  
  14. }Stack;  
  15.   
  16. Stack *InitStack();  
  17.   
  18. void DestroyStack(Stack *ps);  
  19.   
  20. void ClearStack(Stack *ps);  
  21.   
  22. int IsEmpty(Stack *ps);  
  23.   
  24. int GetSize(Stack *ps);  
  25.   
  26. PNode *GetTop(Stack *ps,int *pitem);  
  27.   
  28. PNode *Push(Stack *ps,int item);  
  29.   
  30. PNode *Pop(Stack *ps,int *pitem);  
  31.   
  32. void StackTraverse(Stack *ps,void (*visit)());  
  33.   
  34. #endif  

Stack.c

[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include "Stack.h"  
  3. #include <malloc.h>  
  4. #include <stdlib.h>  
  5.   
  6. Stack *InitStack()  
  7. {  
  8.     Stack *ps;  
  9.     ps=(Stack *)malloc(sizeof(Stack));  
  10.     if(ps!=NULL)  
  11.     {  
  12.         ps->top = NULL;  
  13.         ps->size = 0;  
  14.     }  
  15.     return ps;  
  16. }  
  17.   
  18. void DestroyStack(Stack *ps)  
  19. {  
  20.     if(IsEmpty(ps)!=1)  
  21.         ClearStack(ps);  
  22.     free(ps);  
  23. }  
  24.   
  25. void ClearStack(Stack *ps)  
  26. {  
  27.     while(IsEmpty(ps)!=1)  
  28.     {  
  29.         Pop(ps,NULL);  
  30.     }     
  31. }  
  32.   
  33. int IsEmpty(Stack *ps)  
  34. {  
  35.     if(ps->top == NULL&&ps->size == 0)  
  36.     return 1;  
  37. }  
  38.   
  39.   
  40. int GetSize(Stack *ps)  
  41. {  
  42.     return ps->size;  
  43. }  
  44.   
  45. PNode *GetTop(Stack *ps,int *pitem)  
  46. {  
  47.     if(IsEmpty(ps)!=1&&pitem!=NULL)  
  48.     {  
  49.         *pitem = ps->top->data;  
  50.     }  
  51.     return ps->top;  
  52. }  
  53.   
  54. PNode *Push(Stack *ps,int item)  
  55. {  
  56.     PNode *pnode = (PNode *)malloc(sizeof(PNode));  
  57.     if(pnode!=NULL)  
  58.     {     
  59.         pnode->data = item;  
  60.         pnode->down = GetTop(ps,NULL);  
  61.         ps->size++;  
  62.         ps->top = pnode;  
  63.     }  
  64.     return pnode;  
  65. }  
  66.   
  67. PNode *Pop(Stack *ps,int *pitem)  
  68. {  
  69.     PNode *pnode = ps->top;  
  70.     if(IsEmpty(ps)!=1&&pnode!=NULL)  
  71.     {  
  72.         if(pitem!=NULL)  
  73.             *pitem = pnode->data;  
  74.         ps->size--;  
  75.         ps->top = ps->top->down;  
  76.         free(pnode);  
  77.     }  
  78.     return ps->top;  
  79. }  
  80.   
  81. void StackTraverse(Stack *ps,void(*visit)())  
  82. {  
  83.     PNode *p = ps->top;  
  84.     int i = ps->size;  
  85.     while(i--)  
  86.     {  
  87.         visit(p->data);  
  88.         p = p->down;  
  89.     }  
  90. }  

Test.c

[cpp] view plaincopy
  1. #include "Stack.h"  
  2. #include <stdio.h>  
  3.   
  4. void print(int i)  
  5. {  
  6.     printf("The data of this node is:%d\n",i);  
  7. }  
  8.   
  9. int main()  
  10. {  
  11.     Stack *ps = InitStack();  
  12.     int i,item;  
  13.       
  14.     printf("0-9 push in stack,and print:\n");  
  15.     for(i=0;i<10;i++)  
  16.     {  
  17.         Push(ps,i);  
  18.         GetTop(ps,&item);  
  19.         printf("%d",item);  
  20.     }  
  21.   
  22.     printf("\nTraverse from stacktop to stack down and print\n");  
  23.     StackTraverse(ps,print);  
  24.   
  25.     printf("The data of stack pop as it's turn and print:\n");  
  26.     for(i=0;i<10;i++)  
  27.     {  
  28.         Pop(ps,&item);  
  29.         printf("%d",item);  
  30.     }  
  31.   
  32.     ClearStack(ps);  
  33.     if(IsEmpty(ps))  
  34.         printf("\nIt is a success to clear the stack\n");  
  35.     DestroyStack(ps);  
  36.     printf("The stack is destroyed!\n");  
  37. }  

执行结果如下:



makefile:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 实现数据库读写分离

Spring 实现数据库读写分离 现在大型的电子商务系统&#xff0c;在数据库层面大都采用读写分离技术&#xff0c;就是一个Master数据库&#xff0c;多个Slave数据库。Master库负责数据更新和实时数据查询&#xff0c;Slave库当然负责非实时数据查询。因为在实际的应用中&#xf…

vue 3.x 中使用ele-image时相对路径的图片加载失败

参考文档&#xff1a; https://element.eleme.cn/#/zh-CN/component/installation 环境: Mac OS X 10.12 [zcmele 2]$node -v v12.6.0 [zcmele 3]$npm -v 6.9.0 [zcmele 4]$cnpm -v cnpm6.1.0 (/usr/local/lib/node_modules/cnpm/lib/parse_argv.js) npm6.10.2 (/usr/local/li…

ie6兼容问题汇总

这几天在查找和解决网页在ie6下的兼容性问题花了我不少的时间&#xff0c;参考了网上的一些解决方法和自己做出来比较有效果的给大家参考一下&#xff0c;也方便我日后再用到&#xff1a; 1.IE的cache设置为Every visit to the page&#xff0c;而不是默认的Automatically。基本…

Linux C 数据结构---线性表

数据结构指的是数据元素及数据元素之间的相互关系&#xff0c;包含下面三方面的内容&#xff1a; 其中&#xff0c;线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系&#xff0c;即除了第一个和最后一个数据元素之外&#xff0c;其…

Postman发送请求时带上登录信息

正常情况下&#xff0c;没有登录验证等公共接口&#xff0c;用postman进行get或post请求都很方便&#xff0c;加上相应的参数就行。 但是对于某些接口&#xff0c;可能需要先登录后才能请求&#xff0c;这时如果按正常的思路请求&#xff0c;可能就会被拦截了。 对于这种情况…

Chrome跨域问题

2019独角兽企业重金招聘Python工程师标准>>> 在chrome图标&#xff0c;右键--->属性 --->目标 路径末尾添加 “--disable-web-security” 重启即可 转载于:https://my.oschina.net/u/861562/blog/152171

Linux C 数据结构---单向链表

线性表存储结构分为顺序存储、链式存储。 顺序存储的优点&#xff1a; 顺序存储的缺点&#xff1a; 链表就是典型的链式存储&#xff0c;将线性表L &#xff08;a0,a1,a2,........an-1&#xff09;中个元素分布在存储器的不同存储块&#xff0c;成为结点&#xff08;Node&…

分页插件--根据Bootstrap Paginator改写的js插件

刚刚出来实习&#xff0c;之前实习的公司有一个分页插件&#xff0c;和后端的数据字典约定好了的&#xff0c;基本上是看不到内部是怎么实现的&#xff0c;新公司是做WPF的&#xff0c;好像对于ASP.NET的东西不多&#xff0c;导师扔了一个小系统给我和另一个同事&#xff0c;指…

Linux C 算法分析初步

提到算法&#xff0c;必须提到数据结构&#xff0c;我们要知道一个著名公式&#xff1a; 数据结构 算法 程序 我们先看看下面这张图&#xff1a; 算法是什么&#xff1f;算法是一个有穷规则&#xff08;或语句、指令&#xff09;的有续集和。他确定了解决某一问题的一个运算序…

hive实例,GPRS流量统计

2019独角兽企业重金招聘Python工程师标准>>> 最近面试&#xff0c;发现很多公司在使用hive对数据进行处理。 hive是hadoop家族成员&#xff0c;是一种解析like sql语句的框架。它封装了常用MapReduce任务&#xff0c;让你像执行sql一样操作存储在HDFS的表。 hive的表…

Linux C 数据结构—-循环链表

前面我们学习了单向链表&#xff0c;现在介绍单向循环链表&#xff0c;单向循环链表是单链表的一种改进&#xff0c;若将单链表的首尾节点相连&#xff0c;便构成单向循环链表结构&#xff0c;如下图&#xff1a; 对于一个循环链表来说,其首节点和末节点被连接在一起。这种方式…

预备作业03 20162320刘先润

第一次编代码 这几周自学了Linux基础入门&#xff0c;有好多想吐槽的地方&#xff0c;所以这篇随笔是带有半吐槽性质的&#xff0c;这是我学完后最真实的感受 我在电脑上按照教程安装了虚拟机&#xff0c;对于Linux这个完全陌生的概念也稍微算是有些理解&#xff0c;但是还有很…

JTable 失去焦点时取消编辑状态

为什么80%的码农都做不了架构师&#xff1f;>>> reference&#xff1a; http://tips4java.wordpress.com/2008/12/12/table-stop-editing/ 当JTable的单元格处于编辑状态时&#xff0c;如果用户触发以下事件&#xff0c;表格就会退出编辑状态&#xff0c;进而调用T…

Linux C 数据结构——栈

还是先把这张图贴出来&#xff0c;以便对比和理解 栈是限制在一段进行插入操作和删除操作的线性表&#xff08;俗称堆栈&#xff09;&#xff0c;允许进行操作的一端称为“栈顶”&#xff0c;另一固定端称为“栈底”&#xff0c;当栈中没有元素称为“空栈”。特点&#xff1a;先…

常用的HTTP状态码

2019独角兽企业重金招聘Python工程师标准>>> 第一、成功的状态码&#xff1a; 1&#xff09;200 OK – 服务器成功返回网页 2&#xff09;304 Not Modified – 未修改 第二、失败的状态码&#xff1a; 3&#xff09;404 Not F…

Linux C 数据结构——队列

还是先放这张图&#xff0c;以便对比和理解&#xff1a; 队列是限制在两端进行插入操作和删除操作的线性表&#xff0c;允许进行存入操作的一端称为“队尾”&#xff0c;允许进行删除操作的一端称为“队头”。当线性表中没有元素时&#xff0c;称为“空队”。特点&#xff1a;先…

如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间

1.安装FF的Firebug组件&#xff1a;点击FF的Tools的Add-ons菜单&#xff0c;输入Firebug关键字&#xff0c;并选择合适的版本Install。 2.安装完毕后地址栏右边会出现一个小虫图标&#xff0c;右边还有一个下拉箭头。如下图&#xff1a; 3.点击下拉箭头&#xff0c;选择“on fo…

Linux C 数据结构——二叉树

先放这张图&#xff1a; 可以看出&#xff0c;树是非线性结构&#xff1b; 一、树的概念 树&#xff08;tree&#xff09;是n(n>0)个节点的有限集合T&#xff0c;它满足两个条件&#xff1a; 1&#xff09;有且仅有一个特定的称为根&#xff08;root&#xff09;的节点&…

Linux C 算法——查找

所谓“查找”记为在一个含有众多的数据元素&#xff08;或记录&#xff09;的查找表中找出某个“特定的”数据&#xff0c;即在给定信息集上寻找特定信息元素的过程。 为了便于讨论&#xff0c;必须给出这个“特定的”词的确切含义。首先&#xff0c;引入一个“关键字”的概念&…

SharePoint项目中新建类库的错误处理及项目建设中遇到的问题总结

第一次SP项目总监遇到各种问题&#xff0c;以下是总结&#xff1a;问题1.创建SP项目的时候“场解决方案”跟“沙盒解决方案”是有区别的&#xff0c;具体可以看MSDN官方文档&#xff0c;这里简单摘抄如下&#xff1a;1&#xff09;场解决方案&#xff1a;承载与W3WP.exe中&…