鱼C论坛

 找回密码
 立即注册
查看: 3461|回复: 4

[技术交流] DS\栈操作集合

[复制链接]
发表于 2014-5-15 12:25:36 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ~风介~ 于 2014-5-15 23:59 编辑

1.顺序栈
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. #define STACK_INIT_SIZE 20
  4. #define STACKINCREMENT 10

  5. typedef char ElemType;
  6. typedef struct
  7. {
  8.         ElemType *base;
  9.         ElemType *top;
  10.         char stackSize;
  11. } sqStack;

  12. void InitStack(sqStack *s)
  13. {
  14.         s->base = (ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
  15.         if(!s->base)
  16.         {
  17.                 exit(0);
  18.         }
  19.         
  20.         s->top = s->base;
  21.         s->stackSize = STACK_INIT_SIZE;
  22. }

  23. void ClearStack(sqStack *s)
  24. {
  25.         s->base = s->top;
  26. }

  27. void DestroyStack(sqStack *s)
  28. {
  29.         int i,len;
  30.         len = s->stackSize;
  31.         for(i=0;i<len;i++)
  32.         {
  33.                 free(s->base);
  34.                 s->base++;        
  35.         }
  36.         s->base = s->top = NULL;
  37.         s->stackSize = 0;
  38. }

  39. void Push(sqStack *s,ElemType e)
  40. {
  41.         if(s->top - s->base >= s->stackSize)
  42.         {
  43.                 s->base = (ElemType *)realloc(s->base,(s->stackSize + STACKINCREMENT)*sizeof(ElemType));
  44.                 if(!s->base)
  45.                 {
  46.                         exit(0);
  47.                 }
  48.         }
  49.         *(s->top) = e;
  50.         s->top++;
  51. }

  52. void Pop(sqStack *s,ElemType *e)
  53. {
  54.         if(s->top == s->base)
  55.         {
  56.                 return;
  57.         }
  58.         *e = *--(s->top);//先将top指针--再把内容赋值
  59. }


  60. int StackLen(sqStack s)
  61. {
  62.         return (s.top-s.base);
  63. }

  64. void GetTop(sqStack *s,ElemType *j)
  65. {
  66.         if(s->top!=NULL)
  67.         {
  68.                 *j = *--(s->top);
  69.                 s->top++;
  70.         }
  71.         else
  72.         {
  73.                 printf("栈空!");        
  74.         }
  75.         
  76. }

  77. int main()
  78. {
  79.         ElemType c,j;
  80.         sqStack s;
  81.         int len,i;

  82.         
  83.         InitStack(&s);
  84.         
  85.         printf("请输入整数<#结束>:");
  86.         scanf("%c",&c);
  87.         while(c != '#')
  88.         {
  89.                 Push(&s,c);
  90.                 scanf("%c",&c);
  91.         }
  92.         
  93.         getchar();
  94.         
  95.         len = StackLen(s);
  96.     printf("栈的当前容量是: %d\n", len);
  97.     GetTop(&s,&j);
  98.         printf("栈顶是:%c\n",j);
  99.         printf("出栈的结果是:");
  100.         for(i=0;i<len;i++)
  101.         {
  102.                 Pop(&s,&c);
  103.                 printf("%c",c);
  104.         }
  105.         
  106.         return 0;
  107. }
复制代码
2.链栈
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. #define SACK_INIT_SIZE 20
  4. #define INCREMENT 10

  5. typedef char ElemType;
  6. typedef int Status;
  7. typedef struct StackNode
  8. {
  9.         ElemType data;
  10.         struct StackNode *next;
  11. }StackNode;

  12. typedef struct LinkStack
  13. {
  14.         StackNode *top;
  15.         int count;
  16. }LinkStack;

  17. Status InitStack(LinkStack *s)
  18. {
  19.         s->top=(StackNode *)malloc(sizeof(StackNode));
  20.         if(s->top==NULL)
  21.                 printf("分配空间失败!");
  22.         s->top=NULL;
  23.         s->count = 0;
  24.         return 0;
  25. }

  26. Status StackEmpty(LinkStack s)
  27. {
  28.         if(s.count==0)
  29.                 return 1;
  30.         else
  31.                 return 0;
  32. }

  33. Status Push (LinkStack *s,ElemType e)
  34. {
  35.         StackNode *p = (StackNode*)malloc(sizeof(StackNode));
  36.         p->data =e;
  37.         p->next = s->top;
  38.         s->top = p;
  39.         s->count++;
  40.         
  41.         return 0;
  42. }

  43. Status Pop(LinkStack *s,ElemType *e)
  44. {
  45.         StackNode *p;
  46.         if(StackEmpty(*s))
  47.         {
  48.                 printf("栈空");
  49.             exit(0);
  50.         }
  51.         
  52.     *e = s->top->data;
  53.            p=s->top;
  54.            s->top=s->top->next;
  55.     free(p);
  56.            s->count--;
  57.            return 0;        
  58. }



  59. Status GetTop(LinkStack *s,ElemType *e)
  60. {
  61.         if(s->top!=NULL)
  62.                 *e=s->top->data;
  63.         else
  64.                 printf("栈空!");
  65.         
  66.         return 0;
  67. }

  68. Status StackLen(LinkStack s)
  69. {         
  70.         return (s.count);
  71. }
  72. int main()
  73. {
  74.         ElemType c,j,d;
  75.     LinkStack s;
  76.         int len,i;
  77.                
  78.         InitStack(&s);
  79.         
  80.         printf("请输入整数<#结束>:");
  81.         scanf("%c",&c);
  82.         while(c != '#')
  83.         {
  84.                 Push(&s,c);
  85.                 scanf("%c",&c);
  86.         }
  87.         
  88.         getchar();
  89.         
  90.         len=StackLen(s);
  91.     printf("栈的当前容量是: %d\n", len);
  92.     GetTop(&s,&j);
  93.         printf("栈顶是:%c\n",j);
  94.         printf("出栈的结果是:");
  95.     for(i=0;i<len;i++)
  96.         {
  97.                 Pop(&s,&d);
  98.             printf("%c",d);
  99.         }
  100.         return 0;
  101. }
复制代码
截图:

QQ拼音截图未命名.png
后继操作会继续补充~ ^_^



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-15 12:30:12 | 显示全部楼层
什么都要设置个隐藏,有意思么……

点评

严防伸手党,人人有责!  详情 回复 发表于 2014-5-15 18:07
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-15 18:07:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-18 15:06:24 | 显示全部楼层
过来学习学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-12 22:14:39 | 显示全部楼层

学习一下~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 05:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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