小编使用的编译器CLion。如有问题可以私信小编,有不懂得也可以私信哦。
* 构造链式栈
* 创建节点
* 判断是否为空
* 插入节点
* 取出节点
* 遍历栈
* 销毁栈
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}LinkedStack,*LStack;
/*构造链式栈*/
LStack CreatStack()
{
LStack stack = (LStack)malloc(sizeof(LinkedStack));
if(!stack)
{
printf("链表创建失败!\n");
exit(-1);
}
stack->next = NULL;
stack->data = -1;
printf("链表创建成功!\n");
return stack;
}
/*创建节点*/
LStack CreatNode(ElemType data)
{
LStack node = (LStack)malloc(sizeof(LinkedStack));
if(!node)
{
printf("节点创建失败!\n");
exit(-1);
}
node->data = data;
node->next = NULL;
printf("节点创建成功!\n");
return node;
}
/*判断是否为空*/
int StackIsEmpty(LStack s)
{
if(s->next==NULL)
{
return 1;
}
return 0;
}
/*插入值为data的节点到栈顶*/
void PushNode(LStack s,ElemType data)
{
LStack newnode = CreatNode(data);
while(s->next!=NULL)
{
s=s->next;
}
s->next = newnode;
printf("节点-- %d --插入成功!\n",data);
}
/*取出栈顶节点*/
ElemType PopNode(LStack s)
{
if(StackIsEmpty(s))
{
printf("栈为空!\n");
exit(-1);
}
ElemType pop_node_value;
LStack popnode=NULL;
while(s->next->next!=NULL)
{
s=s->next;
}
popnode = s->next;
pop_node_value = popnode->data;
free(popnode);
s->next=NULL;
return pop_node_value;
}
/*遍历栈内所有元素*/
void PrintStack(LStack s)
{
if(StackIsEmpty(s))
{
printf("栈为空!\n");
exit(-1);
}
while(!StackIsEmpty(s))
{
printf("%d->",PopNode(s));
}
}
/*销毁栈*/
void DestroyStack(LStack s)
{
while(!StackIsEmpty(s))
{
PopNode(s);
}
free(s);
printf("栈销毁成功!\n");
}
int main()
{
return 0;
}