我最近在学习数据结构,记录一些学习中编写的代码,方便数据结构的初学者。
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LNode, *LinkStack;
//初始化链栈
bool LinkStack_Init(LinkStack &LS){
LS = (LinkStack)malloc(sizeof(LinkStack));
LS->next = NULL;
return true;
}
//入栈(不带头结点)
bool LinkStack_Push(LinkStack &LS, int num){
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = num;
s->next = LS;
LS = s;
return true;
}
//出栈(不带头结点)
bool LinkStack_Pop(LinkStack &LS){
if(LS->next == NULL){
cout << "当前栈空,无法出栈!" << endl;
return false;
}
LNode *p = LS->next;
free(LS);
LS = p;
cout << "出栈成功!" << endl;
return true;
}
//读取栈顶元素
bool LinkStack_GetTop(LinkStack LS, int &num){
if(LS->next == NULL){
cout << "当前栈为空,无元素可读取!" << endl;
return false;
} else {
num = LS->data;
cout << "栈顶元素为:" << LS->data << endl;
return true;
}
}
//获取链栈长度
bool LinkStack_GetLength(LinkStack LS, int &num){
int length = 0;
while(LS->next != NULL){
LS=LS->next;
length++;
}
cout << "栈的长度为:" << length << endl;
return true;
}
//判栈空
bool LinkStack_Empty(LinkStack LS){
if(LS->next == NULL){
cout << "当前栈为空" << endl;
return true;
} else {
cout << "当前栈为非空" << endl;
return false;
}
}
//打印栈
void LinkStack_Print(LinkStack LS){
cout << "当前链表中的元素为:" << endl;
while(LS->next != NULL){
cout << LS->data << " ";
LS = LS->next;
}
cout << endl;
}
int main(){
LinkStack LS;
int num;
//初始化链栈
LinkStack_Init(LS);
//判栈空
LinkStack_Empty(LS);
//入栈(不带头结点)
cout << "将1,2,3,4,5入栈:" << endl;
LinkStack_Push(LS, 1);
LinkStack_Push(LS, 2);
LinkStack_Push(LS, 3);
LinkStack_Push(LS, 4);
LinkStack_Push(LS, 5);
//获取链栈的长度
LinkStack_GetLength(LS, num);
//输出链栈中的元素
LinkStack_Print(LS);
LinkStack_GetTop(LS, num);
//出栈(不带头结点)
LinkStack_Pop(LS);
//获取链栈的长度
LinkStack_GetLength(LS, num);
//输出链栈中的元素
LinkStack_Print(LS);
//读取栈顶元素
LinkStack_GetTop(LS, num);
//判栈空
LinkStack_Empty(LS);
//出栈(不带头结点)
LinkStack_Pop(LS);
LinkStack_Pop(LS);
LinkStack_Pop(LS);
LinkStack_Pop(LS);
//获取链栈的长度
LinkStack_GetLength(LS, num);
//判栈空
LinkStack_Empty(LS);
return 0;
}
输出结果为:
如果我的代码对你有帮助,记得点赞+收藏哦!