//带头结点的链栈
//备注:使用头插法,相当于在头部插入,但是需要设一个头部L,L->data=0.L->next此时存储下一个位置地址,
//而没有头结点的时候是直接将data存储在第一个位置
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
//带头结点
typedef struct Linknode {
int data;
struct Linknode* next;
}*LiStack;
bool InitStack(LiStack& L) {
L = (LiStack)malloc(sizeof(Linknode));
if (L == NULL) {
return false;
}
L->next = NULL;
return true;
}
//进栈
LiStack Push(LiStack& L, int x) {
Linknode* s = (LiStack)malloc(sizeof(Linknode));
s->data = x;
s->next = L->next;//当读第一个元素时,L->next=NULL,所以s->next=NULL;再由下一步将s赋给L,当读到第二个时,先短右边的链。
L->next = s;
return L;
}
//出栈
bool Pop(LiStack& L) {
if (L->next == NULL) {
return false;
}
Linknode* q = L->next;
L->next = q->next;
printf("-------------------------\n");
return true;
}
//读栈
void Gettop(LiStack L) {
while (L->next) {
L = L->next;
printf("%d\n", L->data);
}
printf("\n");
}
int main()
{
LiStack L;
InitStack(L);
L = Push(L, 2);
L = Push(L, 8);
L = Push(L, 9);
L = Push(L, 6);
L = Push(L, 4);
Gettop(L);
Pop(L);
Pop(L);
Pop(L);
Gettop(L);
return 0;
}
数据结构-带头结点链栈
于 2023-03-08 21:05:42 首次发布