鱼C论坛

 找回密码
 立即注册
查看: 3100|回复: 11

c语言实现栈的基本操作

[复制链接]
发表于 2014-11-9 19:00:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C语言如何实现栈的基本操作、求源代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-10 21:35:44 | 显示全部楼层
翻书吧,书上都有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-14 22:30:11 | 显示全部楼层
好好学习,天天向上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-21 14:41:25 | 显示全部楼层
这个应该很多的。栈的基本操作的东西网上比较多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-10 09:17:31 | 显示全部楼层
关注
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-14 22:33:21 | 显示全部楼层
看小甲鱼的视频  有讲的 上机打出的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-15 09:17:39 | 显示全部楼层
  1. typedef struct sqStack
  2. {
  3.     ElemType *top;
  4.     ElemType *base;
  5.     int initSize;
  6. }sqStack;
  7. typedef struct sqStack *LinkStack;

  8. //初始化
  9. void InitStack(sqStack *s)
  10. {
  11.     s->base = (LinkStack)malloc(Stack_Init_Size * sizeof(ElemType));
  12.     if(!s->base)
  13.     {
  14.         printf("存储空间分配失败······\n");
  15.         return;
  16.     }
  17.     s->top = s->base;
  18.     s->initSize = Stack_Init_Size;
  19. }
  20. //进栈
  21. void Push(sqStack *s,ElemType *e)
  22. {
  23.     if(s->top - s->base >= s->initSize - 1)
  24.     {
  25.         s->base = (LinkStack)realloc(s->base,(s->initSize + Increase_Size) * sizeof(ElemType));
  26.         //第一个s->base是增加后的存储空间块的地址,第二个是增加空间之前的存储空间块地址,后面是增加过的存储空间块的大小
  27.         if(!s->base)
  28.         {
  29.             printf("增加存储空间失败······\n");
  30.             return;
  31.         }
  32.         s->initSize = Increase_Size + Stack_Init_Size;
  33.     }
  34.     *(s->top) = *e;
  35.     (s->top)++;
  36. }
  37. //出栈
  38. void Pop(sqStack *s,ElemType *e)
  39. {
  40.     if(s->top == s->base)
  41.     {
  42.         printf("栈已空,无法进行出栈操作······\n");
  43.         return;
  44.     }
  45.     s->top--;
  46.     *e = *s->top;
  47. }
  48. //求栈的长度
  49. int StackLen(sqStack s)
  50. {
  51.     return (s.top - s.base);
  52. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-15 09:18:37 | 显示全部楼层
http://www.cnblogs.com/devinblog/
最近在博客上也写了一点程序,你可一看看,希望对你有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-15 22:41:26 | 显示全部楼层
小甲鱼有视频的  自己去看下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-29 19:53:26 | 显示全部楼层
mark
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-31 10:24:46 | 显示全部楼层
mark
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-8 20:33:21 | 显示全部楼层
  1. //2014.10.02        顺序栈的实现方式
  2. #include<iostream>
  3. #include<math.h>
  4. #include"assert.h"
  5. using namespace std;

  6. #define INCREMENT_SIZE 2
  7. typedef struct STACK
  8. {
  9.         int stacksize;
  10.         int* pstop;                        //栈顶指针p表示指针s表示栈
  11.         int* psbottom;
  12. }STACK;

  13. void init_stack(STACK& s)
  14. {
  15.        
  16.         s.stacksize = INCREMENT_SIZE;
  17.         //注意加1的原因:s.psbottom不存放数据本身要占据一个字节的空间
  18.         s.pstop = s.psbottom =(int*)malloc(sizeof(int)*(s.stacksize+1));
  19.         if(NULL ==         s.pstop)
  20.         {
  21.                 cout<<"为栈分配存储空间失败";
  22.                 return;
  23.         }
  24.        
  25. }



  26. bool push(STACK& s,int val)
  27. {
  28.        
  29.         int k = s.pstop-s.psbottom;
  30.         if((s.pstop-s.psbottom)>=s.stacksize)
  31.         {
  32.                 //注意加1的原因:s.psbottom不存放数据本身要占据一个字节的空间
  33.                 s.psbottom = (int*)realloc(s.psbottom ,sizeof(int)*(s.stacksize+INCREMENT_SIZE+1));
  34.                 if(NULL == s.psbottom)
  35.                 {
  36.                         cout<<"栈已满,为将要压栈的元素分配内存失败"<<endl;
  37.                         return false;
  38.                 }
  39.                 s.pstop = s.psbottom+s.stacksize;
  40.                 s.stacksize+=INCREMENT_SIZE;
  41.         }
  42.                 s.pstop++;
  43.                 *s.pstop = val;
  44.        
  45.                 return true;
  46. }

  47. bool pop(STACK& s,int& val)
  48. {
  49.         if(s.psbottom == s.pstop)
  50.         {
  51.                 cout<<"栈为空出栈失败"<<endl;
  52.                 return false;
  53.         }

  54.         val = *s.pstop--;
  55.         return true;
  56. }
  57. void dis_stack(STACK& s)
  58. {
  59.         if(s.pstop == s.psbottom)
  60.         {
  61.                 cout<<"栈为空"<<endl;
  62.                 return ;
  63.         }
  64.        
  65.         int* p = s.pstop ;
  66.         while(p != s.psbottom)
  67.         {
  68.                 cout<<*p<<endl;
  69.                 p--;
  70.         }
  71. }


  72. bool get_top(STACK&s, int& val)
  73. {
  74.         if(s.psbottom == s.pstop)
  75.         {
  76.                 cout<<"栈为空"<<endl;
  77.                 return false;
  78.         }

  79.         val = *s.pstop;
  80.         return true;
  81. }

  82. STACK stack;
  83. int main(void)
  84. {
  85.         init_stack(stack);
  86.         push(stack,23);
  87.         push(stack,78);
  88.         push(stack,26);
  89.         push(stack,90);
  90.         push(stack,45);       
  91.         push(stack,45);
  92.         push(stack,78);
  93.         push(stack,123);       
  94.         dis_stack(stack);
  95.         int val = 0;
  96.         cout<<endl;
  97.         pop(stack,val);
  98.         cout<<val<<endl;
  99.         cout<<endl;
  100.         pop(stack,val);
  101.         cout<<val<<endl;
  102.         cout<<endl;
  103.         dis_stack(stack);

  104.         int top_val;
  105.         get_top(stack,top_val);
  106.         cout<<endl;
  107.         cout<<top_val<<endl;
  108.     return 0;
  109. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 15:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表