链式栈的基本操作

来源:互联网 发布:ipadair2如何下载软件 编辑:程序博客网 时间:2024/05/16 00:34

//fun.cpp

#include<iostream>
#include"head.h"
using namespace std;
stack* InitStack(stack *s)
{

stack *p, *q;
s = new stack();
s->data = 1;
p = s;
int m;
cout << "输入栈的大小" << endl;
cin >> m;
for (int i = 0; i < m; i++)
{
q = new stack();
q->data = i;
s->next = q;
//q->next = NULL;
s = q;
}
s->next = NULL;
display(p);
return p;
}




stack* Push(stack*s, int e)
{
stack *p = new stack();
if (p == NULL)
{
cout << "未分配成功" << endl;
exit(0);
}
else
{
p->data = e;
p->next =s;
//s = p;
}
cout << "遍历" << endl;
display(p);
return p;
}


int Getpop(stack*s)
{

return  s->data;
}


stack*  Pop(stack*s)
{
int e = s->data;
stack *p = s->next;
//s->top = s->top--;
delete s ;
s =p ;
cout << "栈顶元素重新遍历函数" << endl;
display(s);
cout << e << endl;
return s;
}


bool isEmpty(stack *s)
{
return s == NULL;
}


int Clear(stack *s)
{
if (s == NULL)
{
cout << "为空栈" << endl;
exit(0);
return 0;
}
else
{
stack *temp = NULL;
while (s != NULL)
{
temp = s;
s = s->next;
delete temp;
}
return 1;
}
}
void display(stack *s)
{
stack *p;
p = s;
while (p!= NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}

//main.cpp

#include<iostream>
#include"head.h"
using namespace std;
int main()
{
stack *s;
s = new stack();
s=InitStack(s);
cout << "要入栈的数" << endl;
int m;
cin >> m;
s=Push(s, m);
cout<<"栈顶元素为:"<< Getpop(s)<<endl;
cout << "退栈的元素为:";
s = Pop(s);
if (!isEmpty(s))
{
cout << "不为空" << endl;
}
else
{
cout << "空" << endl;
}
if (Clear(s)==1)
{
cout << "清除成功" << endl;
}
else
{
cout << "失败" << endl;
}
}

head.h

struct stack
{

stack *next;
int data;
};
stack* InitStack(stack*s);//初始化操作
stack* Push(stack*s, int e);//入栈
void display(stack *s);//遍历
int Getpop(stack*s);//访问栈顶
stack* Pop(stack*s);//退出栈顶
bool isEmpty(stack *s);//判断站是否为空
int Clear(stack *s);