上一页 下一个

C语言编程基础

链接堆栈示例

动态数据结构的一个很好的例子是一个简单的堆栈库,它使用一个动态列表,并包含init、clear、push和pop函数。这个库的头文件是这样的:

/*堆栈库-该库为整数堆栈提供了最小的堆栈操作(易于更改)void stack_init();/*初始化这个库。打电话之前先打电话。*/ extern void stack_clear();/*清除堆栈中的所有条目。*/ extern int stack_empty();/*如果堆栈为空则返回1,否则返回0。*/ extern void stack_push(stack_data d);/*将值d压入堆栈。 */ extern stack_data stack_pop(); /* Returns the top element of the stack, and removes that element. Returns garbage if the stack is empty. */

库的代码文件如下:

广告

#include " stdio.h " #include  /*堆栈库-该库为整数堆栈提供了最小的堆栈操作*/ struct stack_rec {stack_data data;Struct stack_rec *next;};struct stack_rec *top=NULL;void stack_init() /*初始化这个库。打电话之前先打电话。*/ {top=NULL;} void stack_clear() /*清除堆栈中的所有条目。*/ {stack_data x;While (!stack_empty()) x=stack_pop(); } int stack_empty() /* Returns 1 if the stack is empty, 0 otherwise. */ { if (top==NULL) return(1); else return(0); } void stack_push(stack_data d) /* Pushes the value d onto the stack. */ { struct stack_rec *temp; temp= (struct stack_rec *)malloc(sizeof(struct stack_rec)); temp->data=d; temp->next=top; top=temp; } stack_data stack_pop() /* Returns the top element of the stack, and removes that element. Returns garbage if the stack is empty. */ { struct stack_rec *temp; stack_data d=0; if (top!=NULL) { d=top->data; temp=top; top=top->next; free(temp); } return(d); }

注意这个库18新利最新登入是如何实现信息隐藏的:只能看到头文件的人无法判断堆栈是18luck手机登录用数组、指针、文件还是其他方式实现的。还要注意C使用.NULL定义在stdio . h,所以你几乎总是要包括stdio . h当你使用指针时。NULL和0一样。

C应避免的错误

  • 在引用记录时忘记包含括号,例如在(*p)中。我上面
  • 不能处理你分配的任何块-例如,你不应该在堆栈函数中说top=NULL,因为动作孤儿块需要被处理。
  • 忘记在任何指针操作中包含stdio.h,以便可以访问NULL。

其他可以尝试的事情

添加一个dup,一个,以及添加函数复制堆栈的顶部元素,返回堆栈中元素数量的计数,并添加堆栈中最上面的两个元素。

特色
Baidu