设为首页 加入收藏

TOP

C语言接口与实现实例(三)
2014-07-19 23:04:09 来源: 作者: 【 】 浏览:187
Tags:语言 接口 实现 实例

 

  其中NEW是一个另一个接口中的一个分配宏指令。NEW(p)将分配该结构的一个实例,并将其指针赋给p,因此Stack_new中使用它就可以分配一个新的Stack_T

  当count=0时,Stack_empty返回1,否则返回0:

  int Stack_empty(T stk) {

  assert(stk);

  return stk->count == 0;

  }

  assert(stk)实现了可检查的运行期错误,它禁止空指针传给Stack中的任何函数。

  Stack_push和Stack_pop从stk->head所指向的链表的头部添加或移出元素:

  void Stack_push(T stk, void *x) {

  struct elem *t;

  assert(stk);

  NEW(t);

  t->x = x;

  t->link = stk->head;

  stk->head = t;

  stk->count++;

  }

  void *Stack_pop(T stk) {

  void *x;

  struct elem *t;

  assert(stk);

  assert(stk->count > 0);

  t = stk->head;

  stk->head = t->link;

  stk->count--;

  x = t->x;

  FREE(t);

  return x;

  }

  FREE是另一个接口中定义的释放宏指令,它释放指针参数所指向的空间,然后将参数设为空指针

  void Stack_free(T *stk) {

  struct elem *t, *u;

  assert(stk && *stk);

  for (t = (*stk)->head; t; t = u) {

  u = t->link;

  FREE(t);

  }

  FREE(*stk);

  }

  完整实现代码如下:

  #include

  #include "assert.h"

  #include "mem.h"

  #include "stack.h"

  #define T Stack_T

  struct T {

  int count;

  struct elem {

  void *x;

  struct elem *link;

  } *head;

  };

  T Stack_new(void) {

  T stk;

  NEW(stk);

  stk->count = 0;

  stk->head = NULL;

  return stk;

  }

  int Stack_empty(T stk) {

  assert(stk);

  return stk->count == 0;

  }

  void Stack_push(T stk, void *x) {

  struct elem *t;

  assert(stk);

  NEW(t);

  t->x = x;

  t->link = stk->head;

  stk->head = t;

  stk->count++;

  }

  void *Stack_pop(T stk) {

  void *x;

  struct elem *t;

  assert(stk);

  assert(stk->count > 0);

  t = stk->head;

  stk->head = t->link;

  stk->count--;

  x = t->x;

  FREE(t);

  return x;

  }

  void Stack_free(T *stk) {

  struct elem *t, *u;

  assert(stk && *stk);

  for (t = (*stk)->head; t; t = u) {

  u = t->link;

  FREE(t);

  }

  FREE(*stk);

  }

  stack.c

        

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇语音输入和文字输入动画切换 下一篇C++ 类模板和模板类的深入解..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)