#include "StdAfx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义结点,栈顶,链栈类型
typedef int DataType;
struct Node
{
DataType data;
struct Node* next;
};
typedef struct Node *PNode;
typedef struct Node *top;
typedef struct Node *LinkStack;
//创建空栈
LinkStack SetNullStack()
{
LinkStack top=(LinkStack)malloc(sizeof(struct Node));//申请栈顶空间,top指向
if(top!=NULL)
top->next =NULL;
else
printf("alloc failure");
return top;//返回栈顶指针
}
//判断栈空
int IsNullStack(LinkStack top)
{
return(top->next == NULL);
}
//进栈(头插,所以顺序相反,但对栈而言进出不影响,仍旧后进先出)
void Push(LinkStack top,DataType x)//x进栈
{
PNode p=(PNode)malloc(sizeof(struct Node));//结点p,用于存放新进栈数据
if(p!=NULL)
{
p->data =x;
p->next =top->next ;//使p指针域为NULL
top->next =p;
}
else
printf("alloc failure!\n");
}
//出栈
void Pop(LinkStack top)
{
PNode p;
if(IsNullStack(top))
printf("empty!\n");
else
{
p=top->next ;//孤立p然后删除
top->next =p->next ;
free(p);
}
}
//取栈顶元素
int top_seq(LinkStack top)
{
if(IsNullStack(top))
printf("empty!\n");
else
return top->next ->data ;
}
//打印链栈
void printLinkStack(LinkStack top)
{
PNode p;
if (top == NULL)
printf("\n The Linklist is NULL !\n");
p = top->next;
while (p != NULL)
{
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
//主函数
int main()
{
LinkStack stack1=SetNullStack();//创空栈
Push(stack1,5);//进栈
Push(stack1,8);
Push(stack1,9);
printLinkStack(stack1);
Pop(stack1);//栈顶元素出栈
printLinkStack(stack1);
printf("the top of the stack is %d\n",top_seq(stack1));//返回栈顶元素
printLinkStack(stack1);
system("pause");
}
数据结构—链栈
链栈实现与操作演示
最新推荐文章于 2025-12-02 22:37:42 发布
354

被折叠的 条评论
为什么被折叠?



