堆栈的各种算法

               


注:此文章来自“优快云”博主,仅在此借鉴,学习

各种基本算法实现小结(二)—— 堆 栈

(均已测试通过)

==============================================================

栈——数组实现

测试环境:Win - TC

  1. #include <stdio.h>  
  2. char stack[512];  
  3. int top=0;  
  4. void push(char c)  
  5. {  
  6.     stack[top]=c;  
  7.     top++;  
  8. }  
  9. char pop()  
  10. {  
  11.     top--;  
  12.     return stack[top];  
  13. }  
  14. int is_empty()  
  15. {  
  16.     return 0==top;  
  17. }  
  18. void main()  
  19. {  
  20.     push('1');  
  21.     push('2');  
  22.     push('3');  
  23.     push('4');  
  24.     push('5');  
  25.     while(!is_empty())  
  26.         putchar(pop());  
  27.     putchar('/n');  
  28.     getch();  
  29. }  

运行结果:

====================================================

 

栈——数组实现2

测试环境:Win - TC

  1. #include <stdio.h>  
  2. #include <malloc.h>  
  3. /* typedef int DataType; */  
  4. #define DataType int  
  5. #define MAX 1024  
  6. typedef struct  
  7. {  
  8.     DataType data[MAX];  
  9.     int top;  
  10. }stack, *pstack;  
  11. pstack *init_stack()  
  12. {  
  13.     pstack ps;  
  14.     ps=(pstack)malloc(sizeof(stack));  
  15.     if(!ps)  
  16.     {  
  17.         printf("Error. fail malloc.../n");  
  18.         return NULL;  
  19.     }  
  20.     ps->top=-1;  
  21.     return ps;  
  22. }  
  23. int empty_stack(pstack ps)  
  24. {  
  25.     if(-1 == ps->top)  
  26.         return 1;  
  27.     else  
  28.         return 0;  
  29. }  
  30. int push(pstack ps, DataType data)  
  31. {  
  32.     if(ps->top == MAX-1)  
  33.     {  
  34.         printf("Stack is full.../n");  
  35.         return 0;  
  36.     }  
  37.     ps->top++;  
  38.     ps->data[ps->top]=data;  
  39.     return 1;  
  40. }  
  41. int pop(pstack ps, DataType *data)  
  42. {  
  43.     if(empty_stack(ps))  
  44.     {  
  45.         printf("Stack is empty.../n");  
  46.         return 0;  
  47.     }  
  48.     *data=ps->data[ps->top];  
  49.     ps->top--;  
  50.     return 1;  
  51. }  
  52. DataType top_stack(pstack ps)  
  53. {  
  54.     if(empty_stack(ps))  
  55.     {  
  56.         printf("Stack is empty.../n");  
  57.         return 0;  
  58.     }  
  59.     return ps->data[ps->top];  
  60. }  
  61. void display(pstack ps)  
  62. {  
  63.     int i;  
  64.     if(empty_stack(ps))  
  65.     {  
  66.         printf("Stack is empty.../n");  
  67.         return;  
  68.     }  
  69.     printf("printf the items of stack.../n");  
  70.     for(i=ps->top;i>-1;i--)  
  71.         printf("%4d", ps->data[i]);  
  72.     printf("/n/n");  
  73. }  
  74. void main()  
  75. {  
  76.     int i, num, data, *pdata;  
  77.     pstack ps;  
  78.     ps=init_stack();  
  79.     printf("Enter stack num:");  
  80.     scanf("%d", &num);  
  81.     for(i=0;i<num;i++)  
  82.     {  
  83.         scanf("%d", &data);  
  84.         push(ps, data);  
  85.     }  
  86.     display(ps);  
  87.     printf("Top is %d/n/n", top_stack(ps));  
  88.     for(i=0;i<num;i++)  
  89.     {  
  90.         pop(ps, pdata);  
  91.         printf("%3d", *pdata);  
  92.     }  
  93.     printf("/n/n");  
  94.     display(ps);  
  95.     getch();  
  96. }  

运行结果:

 

====================================================

 

栈——链表实现

测试环境:Win - TC

 

  1. #include <stdio.h>  
  2. #include <malloc.h>  
  3. typedef char DataType;  
  4. struct _node  
  5. {  
  6.     DataType data;  
  7.     struct _node *next;  
  8. };  
  9. typedef struct _node node, *pstack;  
  10. pstack init_stack()  
  11. {  
  12.     pstack ps;  
  13.     ps=(pstack)malloc(sizeof(node));  
  14.     if(NULL == ps)  
  15.     {  
  16.         printf("Error. malloc is fail.../n");  再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值