栈的链表实现

[size=large]栈的链表实现[/size]


记得以前大二学数据结构时利用C++数组实现过栈。这几天还是在看数据结构和算法方面的书,期望提高一下自己的内功。然后看到了很多关于栈的实现,其中要求利用链表实现很多。当时觉得这个应该很简单,所以直接就看了答案,看是否和自己的思路一样。当然,思路是一样了。但是发现所有的栈链表实现都是定义了一个全局变量来表示栈顶,然后这个栈的功能就是修改这个变量。
那么就有个问题了,这就代表这个栈结构每次只能实例化一个栈来用,不能用作两个,那如果某个应用需要利用两个栈,这就不好处理了,所以本人就想自己实现一个满足这个需求的栈。另外也是向学一下gdb调试。所以选简单点的实现。
废话不多说了,贴上代码:

/**********************************************
* copyright (c) 383569614@qq.com
* 2012-07 at Hunan University
* description: stack.h file
* the function's and node declaration
***********************************************/
#ifndef _STACK_H
#define _STACK_H

typedef 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 stack
void push(stack* st,data d);//push d into stack
void pop(stack *st); //pop a elem from stack
data gettop(stack* st); //get the value of top of stack
int getsize(stack* st); //get the size of stack
void destroy(stack *st); //destroy a stack
int 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值