Tveiker 发表于 2013-1-26 12:29:07

栈的链表实现

栈的链表实现


   记得以前大二学数据结构时利用C++数组实现过栈。这几天还是在看数据结构和算法方面的书,期望提高一下自己的内功。然后看到了很多关于栈的实现,其中要求利用链表实现很多。当时觉得这个应该很简单,所以直接就看了答案,看是否和自己的思路一样。当然,思路是一样了。但是发现所有的栈链表实现都是定义了一个全局变量来表示栈顶,然后这个栈的功能就是修改这个变量。
   那么就有个问题了,这就代表这个栈结构每次只能实例化一个栈来用,不能用作两个,那如果某个应用需要利用两个栈,这就不好处理了,所以本人就想自己实现一个满足这个需求的栈。另外也是向学一下gdb调试。所以选简单点的实现。
   废话不多说了,贴上代码:
/***********************************************copyright (c) 383569614@qq.com*    2012-07   atHunan University* description: stack.h file*    the function's and node declaration***********************************************/#ifndef _STACK_H#define _STACK_Htypedef struct DATA{int index;}data;typedef struct NODE{data d;struct NODE *next;}node;typedef struct STACK{node *head;int size;}stack;stack* init(stack* st);//init a stackvoid push(stack* st,data d);//push d into stackvoid pop(stack *st); //pop a elem from stackdata gettop(stack* st); //get the value of top of stackint getsize(stack* st); //get the size of stackvoid destroy(stack *st); //destroy a stackint isempty(stack *st); //whether stack is empty#endif
/******************************************** copyright (c) 383569614@qq.com*2012-07 at Hunan University* description: stack.c*implementations of my stack's interfaces*******************************************/#include <stdio.h>#include <stdlib.h>#include "stack.h"stack* init(stack* st){st=(stack*)malloc(sizeof(stack));st->head=NULL;st->size=0;return st;}void push(stack* st,data d){node *p=(node*)malloc(sizeof(node));p->d=d;if(st->head==NULL){st->head=p;st->head->next=NULL;}else{p->next=st->head;st->head=p;}st->size++;}void pop(stack* st){if(st->head!=NULL){node *p=st->head;st->head=p->next;st->size--;free(p);}else{printf("stack is empty!\n");}}data gettop(stack* st){return st->head->d;}int getsize(stack* st){return st->size;}void destroy(stack* st){while(st->head){node *p=st->head;st->head=p->next;free(p);}}int isempty(stack* st){return st->head==NULL;}
/*************************************   copyright (c) 383569614@qq.com*   2012-07 at Hunan University* description: main.c*test the function of my stack**************************************/#include <stdio.h>#include "stack.h"int main(){stack *st=NULL;st=init(st);int x=0;data d;for( x=0 ; x<10 ; x++ ){d.index=x;push(st,d);}while(!isempty(st)){printf("%d ",gettop(st).index);pop(st);}printf("\n");destroy(st);return 0;}
页: [1]
查看完整版本: 栈的链表实现