#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);
}
}
链栈:初始化、判断栈空、入栈、出栈、获取栈顶元素等
最新推荐文章于 2024-04-23 15:06:57 发布