#include"iostream"
#include"stdlib.h"
using namespace std;
/*
此方法为带头结点栈的链式存储实现
*/
typedef struct Linknode {
int data; //数据域
struct Linknode* next; //指针域
}*LiStack;
//初始化
bool InitStack(LiStack &L) {
L = (LiStack)malloc(sizeof(Linknode)); //创建头结点
L->next = NULL;
if (L == NULL) //内存分配失败
return false;
return true;
}
//入栈 将元素e入栈
bool Push(LiStack &L,int e) {
Linknode* p = (Linknode*)malloc(sizeof(Linknode)); //创建新结点
if (p == NULL) //内存分配失败
return false;
p->data = e;
p->next = L->next;
L->next = p;
return true;
}
//出栈 //用e将出栈的元素带回
bool Pop(LiStack &L, int &e) {
if (L->next == NULL) //空栈
return false;
Linknode* p = L->next; //p指向第一个元素
e= p->data ;
L->next = p->next;
free(p);
return true;
}
//销毁
bool Destory(LiStack &L) {
Linknode* p = L->next; //p始终指向第一个元素
if (p == NULL) //空栈
return false;
while (p!=NULL) {
L->next = p->next;
free(p);
p = L->next;
}
return true;
}
//打印栈中元素
void print_Stack(LiStack L) {
Linknode* p = L->next;
cout << "当前栈的状态(顶->底):";
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main() {
LiStack L; //声明一个栈
int e=-1; //用于将出栈元素带回
//初始化
InitStack(L);
print_Stack(L);
//入栈
for (int i = 1; i <= 10; i++)
Push(L, i);
print_Stack(L);
//出栈
for (int i = 1; i <= 5; i++) //五次出栈
Pop(L, e);
cout << "最后一次出栈的元素为:" << e << endl;;
print_Stack(L);
//销毁栈
Destory(L);
print_Stack(L);
cout << endl;
system("pause");
return 0;
}
带头结点栈的链式存储实现
最新推荐文章于 2024-06-11 22:29:04 发布