在书上只有顺序栈的实现,我觉得没啥写的,就直接写了链栈
因为没有提及到任何操作,我写的在实现上都没有问题,一会我再去其他博客看一看
找一下自己是否还存在哪些错误
#include<iostream>
using namespace std;
//不带头结点的链栈
typedef struct Linknode {
int data;
struct Linknode* next;
}*LiStack;
//初始化链栈
bool InitLiStack(LiStack& S) {
S = new Linknode;//指向第一个结点
S->next = NULL;
S->data = NULL;
return true;
}
//入栈
bool push(LiStack& S,int x) {
//链栈不用判断满
if (S->data==NULL) {//还啥也没有
S->data = x;
S->next = NULL;
return true;
}
else {
Linknode* p = new Linknode;
p->data = x;
p->next = S;
S = p;
return true;
}
return false;
}
//出栈
bool pop(LiStack& S,int &x) {
if (S->data == NULL)//空栈
return false;
else {
x = S->data;
S = S->next;
return true;
}
return false;
}
//输出
void printStack(LiStack S) {
Linknode* p = S;//第一个结点
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
//得到栈顶
int gettop(LiStack S) {
if (S->data == NULL)//啥也没有
return 0;
else {
return S->data;
}
}
//销毁
void destoryStack(LiStack& S) {
while (S != NULL) {
Linknode* p = S;
S = S->next;
delete p;
}
}
int main() {
LiStack s;
InitLiStack(s);
push(s, 10);
push(s, 11);
push(s, 12);
push(s, 13);
push(s, 14);
printStack(s);
int x;
pop(s,x);
cout << x << endl;
printStack(s);
x=gettop(s);
cout << x << endl;
printStack(s);
destoryStack(s);
return 0;
}