Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1562205
  • 博文数量: 327
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 3556
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-05 21:28
个人简介

东黑布衣,流浪幽燕。 真诚善良,值得信赖。

文章分类

全部博文(327)

我的朋友

分类: BSD

2016-10-14 15:56:57


  1. #ifndef __QUE_H__
  2. #define __QUE_H__

  3. #define QUE_SZ 1024

  4. typedef struct que{
  5.    int hd;
  6.    int tl;
  7.    int nd[QUE_SZ];
  8. }QUE;

  9. int que_init(QUE *q);
  10. int que_empty(QUE *q);
  11. int que_full(QUE *q);
  12. int que_head(QUE *q);
  13. int que_tail(QUE *q);
  14. int que_clr(QUE *q);
  15. int que_size(QUE *q);

  16. #endif/*__QUE_H__*/


  1. #include "que.h"

  2. int que_init(QUE *q)
  3. {
  4.    int i;
  5.    if(NULL==q)
  6.       return -1;
  7.    q->hd=0;
  8.    q->tl=0;
  9.    for(i=0;i<QUE_SZ;i++)
  10.       q->nd[i]=0;
  11.    return 0;
  12. }

  13. int que_empty(QUE *q)
  14. {
  15.    return q->hd==q->tl;
  16. }

  17. int que_full(QUE *q)
  18. {
  19.    return (q->tl+1)&(QUE_SZ-1)==q->hd;
  20. }

  21. int que_head(QUE *q)
  22. {
  23.    int n=-1;
  24.    if(!que_empty(q)){
  25.       n=q->nd[q->hd];
  26.       q->hd=(q->hd+1)&(QUE_SZ-1);
  27.    }
  28.    return n;
  29. }

  30. int que_tail(QUE *q,int n)
  31. {
  32.    if(que_full(q))
  33.       return 0;
  34.    q->nd[q->tl]=n;
  35.    q->tl=(q->tl+1)&(QUE_SZ-1);
  36.    return 1;
  37. }

  38. int que_clr(QUE *q)
  39. {
  40.    if(que_empty(q))
  41.       return 0;
  42.    q->hd=q->tl=0;
  43.    return 1;
  44. }

  45. int que_size(QUE *q)
  46. {
  47.    int size=0;
  48.    if(q->hd==q->tl)
  49.       size=0;
  50.    else
  51.       size=(q->tl-q->hd+QUE_SZ)&(QUE_SZ-1);
  52.    return size;
  53. }


  1. #ifndef __STK_H__
  2. #define __STK_H__

  3. #define STK_SZ 1024

  4. typedef struct stk{
  5.    int top;
  6.    int nd[STK_SZ];
  7. }STK;

  8. int stk_init(STK *s);
  9. int stk_empty(STK *s);
  10. int stk_full(STK *s);
  11. int stk_push(STK *s,int n);
  12. int stk_pop(STK *s);
  13. int stk_clr(STK *s);
  14. int stk_size(STK *s);

  15. #endif/*__STK_H__*/


  1. #include "stk.h"

  2. int stk_init(STK *s)
  3. {
  4.    int i=0;
  5.    if(NULL==s)
  6.       return -1;

  7.    s->top=0;
  8.    for(;i<STK_SZ;i++)
  9.       s->nd[i]=0;
  10.    return 1;
  11. }

  12. int stk_empty(STK *s)
  13. {
  14.    return 0==s->top;
  15. }

  16. int stk_full(STK *s)
  17. {
  18.    return STK_SZ==s->top;
  19. }

  20. int stk_push(STK *s,int n)
  21. {
  22.    if(STK_SZ==s->top)
  23.       return 0;
  24.    s->nd[s->top]=n;
  25.    s->top++;
  26.    return 1;
  27. }

  28. int stk_pop(STK *s)
  29. {
  30.    if(0==s->top)
  31.       return 0;
  32.    s->top--;
  33.    return s->nd[s->top];
  34. }

  35. int stk_size(STK *s);
  36. {
  37.    return s->top;
  38. }

  39. int stk_clr(STK *s)
  40. {
  41.    s->top=0;
  42.    return 1;
  43. }



阅读(1444) | 评论(1) | 转发(0) |
0

上一篇:20160928 ADV

下一篇:System Design

给主人留下些什么吧!~~

zhln2016-10-18 15:11:54

队列和栈只是一种思想的抽象,具体怎么实现并没有限制。