您的位置:首页 > 其它

链栈:初始化、判断栈空、入栈、出栈、获取栈顶元素等

2013-09-12 09:55 579 查看
#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

typedef int ElementType;

typedef struct node {
ElementType data;
struct node *next;
}StackNode, *LinkStack;

/* 链栈的初始化 */
void InitStack(LinkStack top) {
top->next = NULL;//top指针指向栈顶元素的上一个位置,下同
}

/* 判断栈是否为空 */
int IsEmpty(LinkStack top) {
if(top->next == NULL)
return TRUE;
return FALSE;
}

/* 元素入栈 */
int Push(LinkStack top, ElementType element) {
LinkStack temp;
temp = (LinkStack)malloc(sizeof(StackNode));
if(temp == NULL)
return FALSE;
temp->data = element;
temp->next = top->next;
top->next = temp;
return TRUE;
}

/* 元素出栈 */
int Pop(LinkStack top, ElementType *element) {
if(IsEmpty(top))
return FALSE;
StackNode *temp = top->next;
*element = temp->data;
top->next = temp->next;
free(temp);
return TRUE;
}

/* 获取栈顶元素 */
int GetTop(LinkStack top, ElementType *element) {
if(top->next == NULL)
return FALSE;
*element = top->next->data;
return TRUE;
}

int main()
{
LinkStack s;
int i;
int result;
s = (LinkStack)malloc(sizeof(StackNode));
InitStack(s);
for(i=1; i<=10; i++)
Push(s,i);

GetTop(s,&result);
printf("栈顶元素为:%d\n",result);

printf("元素依次出栈:\n");
while (!IsEmpty(s))
{
Pop(s,&result);
printf("%d\n",result);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐