Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1743449
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-12-10 13:51:41

原文地址:数据结构之栈 作者:Bean_lee

    这两天岳母在家,自己的生活节奏有点乱,呵呵,只能写写比较简单的东西,好久不写博客也不像话。觉得东西比较幼稚的筒子就一笑而过好了,呵呵。

    前一阵子装系统,两天装CentOS,RHEL,Fedora,Mint,Ubuntu,结果不小心把我的老的Ubuntu里面的code都给弄丢了。现在既然学会了利用github,我就再写一份,一来复习一下,二来万一将来需要写类似的代码,可以快速的拿来用。

    代码都在需要的筒子可以去取一份。

  stack.h 
  1. #ifndef __STACK_H__
  2. #define __STACK_H__

  3. typedef struct Stack_node
  4. {
  5.     void *data;
  6.     struct Stack_node* next;
  7. }Stack_node;

  8. typedef struct Stack
  9. {
  10.     struct Stack_node* head;
  11. }Stack;

  12. int stack_init(struct Stack* self);
  13. int stack_empty(struct Stack* self);
  14. int stack_push(struct Stack* self,void *data);
  15. void* stack_pop(struct Stack* self);

  16. #endif
stack.c

  1. #include "stack.h"
  2. #include<stdlib.h>

  3. int stack_init(struct Stack* self)
  4. {
  5.     if(self == NULL)
  6.     {
  7.         return -1;
  8.     }

  9.     self->head = NULL;
  10.     return 0;
  11. }

  12. int stack_empty(struct Stack* self)
  13. {
  14.     return self->head == NULL;
  15. }

  16. int stack_push(struct Stack* self,void *data)
  17. {
  18.     struct Stack_node* newnode = malloc(sizeof(struct Stack_node));
  19.     if(newnode == NULL)
  20.         return -1;
  21.     else
  22.     {
  23.         newnode->data = data;
  24.         newnode->next = self->head;
  25.         self->head = newnode;
  26.         return 0;
  27.     }    

  28. }

  29. void* stack_pop(struct Stack* self)
  30. {
  31.     if(self->head == NULL)
  32.         return NULL;
  33.     void* data = self->head->data;
  34.     struct Stack_node* next = self->head->next;
  35.     free(self->head);
  36.     self->head = next;

  37.     return data;
  38. }
stack_test.c

  1. #include "stack.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>

  5. int test_stack()
  6. {
  7.     int data_array[10] = {0};
  8.     struct Stack stack;
  9.     int i = 0;

  10.     int ret = stack_init(&stack);
  11.     if(ret < 0)
  12.     {
  13.         fprintf(stderr,"stack init failed\n");
  14.     }

  15.     srand(time(NULL));
  16.     for(i = 0;i<10;i++)
  17.     {
  18.         data_array[i] = rand()%100;
  19.         printf("%d\t",data_array[i]);
  20.         stack_push(&stack,&data_array[i]);
  21.     }
  22.     fprintf(stdout,"\n");
  23.     
  24.     while(stack_empty(&stack) == 0)
  25.     {
  26.         int *p = (int *)stack_pop(&stack);
  27.         fprintf(stdout,"%d\t",*p);
  28.     }
  29.     fprintf(stdout,"\n");
  30.     
  31.     return 0;
  32. }
  33. int main()
  34. {
  35.     test_stack();
  36.     return 0;
  37. }
     测试代码的输出:

  1. root@manu:~/code/c/self/stack# make
  2. gcc -Wall -o stack.o -c stack.c
  3. gcc -Wall -o stack_test.o -c stack_test.c
  4. gcc -o test stack.o stack_test.o
  5. root@manu:~/code/c/self/stack# ./test
  6. 81    51    5    78    84    91    86    83    14    43    
  7. 43    14    83    86    91    84    78    5    51    81

参考文献:
1 算法:C语言实现




阅读(228) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~