您的位置:首页 > 其它

链栈的实现

2015-04-15 15:02 232 查看
stack.h

#ifndef _STACK_H
#define _STACK_H

#include<stdio.h>
#include<stdlib.h>

typedef struct StackNode
{
int data;
struct StackNode* next;
}StackNode,*LinkStack;

//初始化
void init(LinkStack top);
//判断栈是否为空
int isEmpty(LinkStack top);
//将一个元素压入栈
int push(LinkStack top, int val);
//从栈中弹出一个元素
int pop(LinkStack top, int *val);
//获取栈顶元素的值
int getTop(LinkStack top);

#endif


stack.c

#include "stack.h"

void init(LinkStack top)
{
top->next = NULL;
}

int isEmpty(LinkStack top)
{
if(top->next == NULL)
return 1;
return 0;
}
//top指向的结点为空的头结点
int push(LinkStack top, int val)
{
StackNode *newNode;
newNode = (StackNode*)calloc(1,sizeof(StackNode));
newNode->data = val;

if(newNode == NULL)
return 0;
newNode->next = top->next;
top->next = newNode;
return 1;
}

int pop(LinkStack top, int *val)
{
StackNode *oldNode;
if(isEmpty(top))
{
printf("The stack is empty!\n");
return 0;
}
oldNode = top->next;
//记录栈顶元素的值
*val = oldNode->data;
top->next = oldNode->next;
//释放
free(oldNode);
return 1;
}

int getTop(LinkStack top)
{
return top->next->data;
}


main.c

#include "stack.h"

int main()
{
LinkStack top;
top = (StackNode*)malloc(sizeof(StackNode));
int val, index;
init(top);

//向栈中压入一系列元素
for(index = 0; index < 12; index++)
push(top,index);

//获取栈顶元素
val = getTop(top);
printf("栈顶元素为:%d\n",val);

//弹出栈中元素
printf("依次弹出栈顶元素:\n");
while(!(isEmpty(top)))
{
pop(top,&val);
printf("->%2d",val);
}
printf("\n");
return 0;
}


运行结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: