#include<iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node* next;
}Node;
typedef struct Stack
{
Node* top;
Node* head;
}Stack;
void init(Stack &S);
void push(Stack &S, int i);
void pop(Stack &S, int &i);
void Print(Stack S);
int main()
{
Stack S;
S.head = new Node;
init(S);
int i,f;
cout << "请输入1.push 2.pop 3.print 0.break"<< endl;
cin >> f;
while (f)
{
switch (f)
{
case 1:
cout << "请输入push的数字:" << endl;
cin >> i;
push(S, i);
Print(S);
break;
case 2:
pop(S, i);
Print(S);
break;
case 3:
Print(S);
break;
default:
break;
}
cout << "请输入1.push 2.pop 3.print 0.break" << endl;
cin >> f;
}
getchar();
getchar();
return 0;
}
void init(Stack &S)
{
S.top = S.head;
(*S.head).data = 0;
(*S.head).next = NULL;
}
void push(Stack &S, int i)
{
Node* p = S.head;
S.top = new Node;
while((*p).next != NULL)
{
p = p->next;
}
S.top ->data= i;
(*p).next = S.top;
S.top->next = NULL;
}
void pop(Stack &S, int &i)
{
if (S.head->next==NULL)
{
cout << "栈空,操作失败" << endl;
}
else if (S.head->next==S.top)
{
i = S.top->data;
free (S.top);
S.top ==S.head;
S.head->next = NULL;
cout << "栈已空" << endl;
cout << "弹出元素" << i<<endl;
}
else
{
Node *p = S.head;
while (p->next!= S.top)
p = p->next;
i = S.top->data;
free(S.top);
S.top = p;
p->next = NULL;
cout << "弹出元素" << i<<endl;
}
}
void Print(Stack S)
{
Node* p = S.head;
int e;
if (p->next == NULL)
cout << "栈为空" << endl;
else
{
cout << "输出栈:" << endl;
while (p->next != NULL)
{
p = p->next;
e = p->data;
cout << e << endl;
}
}
}
C++ 链表栈及常用函数实现
最新推荐文章于 2021-07-03 22:37:50 发布