好久没有写C语言了,有些生疏,现在来回味一下。
主要来实现一下动态栈
栈底空元素空用来保存栈底指针,判断栈空,假如没有该空节点,将如法判断是否为栈空。(两个栈顶和栈底都指向第一个元素)
结构体
typedef struct Node{
int data;//数据域
struct Node * PNext;//指针域
} Node, * PNext;
typedef struct Stack {
PNext top;
PNext bottom;
}Stack, * PStack;
附上代码
#include<stdio.h>
#include<malloc.h>
#include<stdbool.h>
typedef struct Node{
int data;
struct Node * PNext;
} Node, * PNext;
typedef struct Stack {
PNext top;
PNext bottom;
}Stack, * PStack;
void init(PStack PStack)
{
PStack->bottom = (PNext)malloc(sizeof(Node));
PStack->top = PStack->bottom;
PStack->top->PNext = NULL;
}
void traverse(PStack Ps)
{
if (Ps->bottom == Ps->top)
{
printf("栈为空\n");
return;
}
PNext pt = Ps->top;
while (pt != Ps->bottom)
{
printf("%d ", pt->data);
pt = pt->PNext;
}
printf("\n");
return;
}
void push(PStack Pstack, int val)
{
PNext Pnew = (Node *)malloc(sizeof(Node));//生成一个新节点
Pnew->data = val;
Pnew->PNext = Pstack->top;
Pstack->top = Pnew;
}
void pop(PStack ps)
{
if (ps->top == ps->bottom)
{
printf("栈为空,无法完成出栈操作\n");
return;
}
PNext temp = ps->top;//引入辅助变量,用于释放内存
ps->top = ps->top->PNext;
free(temp);
temp = NULL;
}
void clear(PStack ps)
{
while (ps->top != ps->bottom)
{
PNext temp = ps->top;
ps->top = ps->top->PNext;
free(temp);
}
}
int main()
{
Stack stack;
init(&stack);
push(&stack, 6);
push(&stack, 7);
push(&stack, 8);
traverse(&stack);
pop(&stack);
traverse(&stack);
clear(&stack);
traverse(&stack);
push(&stack, 7);
traverse(&stack);
return 0;
}