Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3849366
  • 博文数量: 146
  • 博客积分: 3918
  • 博客等级: 少校
  • 技术积分: 8584
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-17 13:52
个人简介

个人微薄: weibo.com/manuscola

文章分类

全部博文(146)

文章存档

2016年(3)

2015年(2)

2014年(5)

2013年(42)

2012年(31)

2011年(58)

2010年(5)

分类: C/C++

2012-12-08 23:26:53

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

    前一阵子装系统,两天装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语言实现




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

Bean_lee2012-12-11 19:35:02

wjlkoorey258: 看来Bean_lee兄最近状态不错呦.....
其实心情不好,状态也不好。

wjlkoorey2582012-12-11 19:31:45

看来Bean_lee兄最近状态不错呦

Bean_lee2012-12-09 18:21:43

lmnos: 我只是喜欢探究底层的实现细节,什么移动嵌入式……什么云计算……我根本就一无所知,写OS也是凭兴趣。只是感觉你也是一个挺喜欢探究底层细节的人……呵呵.....
是啊,我也喜欢探究底层细节。咱俩彼此彼此呵呵。在CU 认识三五个兄弟,是我2012年比较高兴的事情。

lmnos2012-12-09 17:11:36

Bean_lee: 呵呵兄弟喜欢大开大阖,目标都是OS,编译器,创建一门语言这种级别的。但我没有这样的目标。我比较懒而且急性子,一上来就让有实现OS 这种目标,我会比较焦虑。.....
我只是喜欢探究底层的实现细节,什么移动嵌入式……什么云计算……我根本就一无所知,写OS也是凭兴趣。只是感觉你也是一个挺喜欢探究底层细节的人……呵呵

lmnos2012-12-09 15:04:21

其实你如果有时间的话,可以自己做个简单的程序解释器出来玩玩,类型于java的JVM…… 慢慢的扩展,说不定哪天你还能创建一门新的语言呢