#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}Node, *Stack;
void initiateStack(Stack &s)
{
s = new Node;
s->next = NULL;
}
bool isEmptyStack(Stack &s)
{
if(NULL == s)
{
cout << "栈不存在." << endl;
exit(0);
}
if(NULL == s->next)
return true;
return false;
}
void push(Stack &s, int element)
{
Node *p = new Node;
p->data = element;
p->next = s->next;
s->next = p;
}
int pop(Stack &s)
{
if(isEmptyStack(s))
{
exit(1);
}
Node *p = s->next;
s->next = p->next;
int element = p->data;
delete p;
return element;
}
int getLength(Stack &s)
{
Node *p = s;
int length = 0;
while(NULL != p->next)
{
p = p->next;
length++;
}
return length;
}
int getTop(Stack &s)
{
if(isEmptyStack(s))
exit(1);
return s->next->data;
}
void clearStack(Stack &s)
{
while(!isEmptyStack(s))
pop(s);
}
void destoryStack(Stack &s)
{
while(!isEmptyStack(s))
pop(s);
delete s;
s = NULL;
}
void print(bool b)
{
if(b)
cout << "yes" << endl;
else
cout << "no" << endl;
}
int main()
{
Stack s;
initiateStack(s);
int n = 100;
int r = 8; // r进制
while(n) // 范式
{
push(s, n % r);
n /= r;
}
while(!isEmptyStack(s))
cout << pop(s);
cout << endl << getLength(s) << endl;
int i;
for(i = 1; i <= 10; i++)
push(s, i);
cout << getTop(s) << endl;
print(isEmptyStack(s));
clearStack(s);
print(isEmptyStack(s));
destoryStack(s);
print(isEmptyStack(s));
return 0;
}