Data structure teacher arranged the basic operation of the chain stack, let us try to use class to achieve, and then I refer to a part of the internet, I wrote a, there are deficiencies, I implore you to point out
* * File name: Chain stack. c
* Implementation of the chain stack
* Version: 2.0
* Time: 2016.11.4
* Author: Wangyan
* Suppose the condition: assuming that the base type of the element is int, and that only one integer information per element needs to be pressed stack
*
*/
#include <iostream>
#define OK 1
#define ERROR-1
using namespace Std;
typedef int ELEMTYPE;
typedef struct STACKNODE
{
Elemtype data;
struct Stacknode *next;
}snode;
Class Linkstack
{
Public
Linkstack ();
int Push (elemtype data); Into the stack
int Pop (); Out Stack elemtype &data
int clear (); Empty chain Stack
BOOL IsEmpty (); Short sentence
int print () const; Print the elements in the chain stack
~linkstack (); Deconstruction, destruction
static int Count; Size of storage stack
Snode *top; Stack top pointer
Protected
};
/** initialization Stack Length * *
int linkstack::count = 0;
/***********************
Initializing chain stacks
Calling constructors
***********************/
Linkstack::linkstack ()
{
top = NULL; top = NULL indicates that the chain stack is empty
}
/***********************
Destroy Chain Stack
destructor
***********************/
Linkstack::~linkstack ()
{
Snode *p = NULL;
while (top)//Loop release node
{
p = top->next;
Delete top;
top = p;
}
}
/***********************
In-stack operation
Push
Data is in the stack
***********************/
int Linkstack::P ush (elemtype data)
{
Snode *snew = new Snode; Create a new node
Snew->data = data; New node Assignment
Snew->next = top; New stack top pointing to old stack top
top = snew; Top point to new stack
Count + +;
return OK;
}
/***********************
Out stack operation
Pop
***********************/
int Linkstack::P op ()
{
if (!top)
return ERROR;
if (isempty () = = 1)
{
cout<< "Stack is empty" <<endl;
return OK;
}
Snode *p = top->next; Pre-stored pointer to next node
data = top->data; Returns the top element of the stack to the main function using
Delete top; Free Stack Top space
top = p; Stack top Move Down
Count--;
return OK;
}
/***************
Determine if the chain stack is empty
IsEmpty
****************/
BOOL Linkstack::isempty ()
{
return (top = NULL); The top of the stack is empty, return 1, NOT NULL return 0
}
/***********************
Empty chain Stack
Clear
Form-and-destructor functions
***********************/
int Linkstack::clear ()
{
Snode *p;
while (top)//Loop release node
{
p = top;
top = top->next;
Delete p;
}
return OK;
}
/***********************
Print the elements in the chain stack
Print
Print element values by traversing the chain stack
***********************/
int Linkstack::P rint () const
{
Snode *p = top;
while (P && Count)//stack is not empty && there is data in the stack
{
cout<<p->data<<ends<<ends; Traverse the data in the print stack
p = p->next;
}
return OK;
}
int main ()
{
Linkstack ls; Define Object ls
int x; Select number and enter the element value of the chain stack
cout<< "*******************************" <<endl;
cout<< "Please select the action to be performed:" <<endl;
cout<< "Initialization" <<endl;
cout<< "1: Press stack" <<endl;
cout<< "2: Out of Stack" <<endl;
cout<< "3: Determine whether the chain stack is empty" <<endl;
cout<< "4: Empty chain stack" <<endl;
cout<< "5: Display chain stack Length" <<endl;
cout<< "6: Print chain stack" <<endl;
cout<< "Destroy chain Stack" <<endl;
cout<< "*******************************" <<endl;
cout<< "Please enter the action to be performed:" <<endl;
while (CIN>>X)
{
Switch (x)
{
Case 1:
cout<< "Input pressure stack data: (end input 0)" <<endl;
cin>>x;
while (x)
{
Ls. Push (x);
cin>>x;
}
cout<<endl<< "Please enter next action:";
Break
Case 2:
if (Ls.isempty ())
cout<< "Chain stack is empty stack" <<endl;
while (Ls.top)
{
Ls. Pop ();
}
cout<<endl<< "Please enter next action:";
Break
Case 3:
if (Ls.isempty ())
cout<< "Chain stack is empty stack" <<endl;
Else
cout<< "Chain stack is not empty" <<endl;
cout<<endl<< "Please enter next action:";
Break
Case 4:
Ls. Clear ();
cout<<endl<< "Please enter next action:";
Break
Case 5:
Cout<<ls. count<<endl;
cout<<endl<< "Please enter next action:";
Break
Case 6:
if (Ls.isempty ())
cout<< "Chain stack is empty stack" <<endl;
Else
Ls.print ();
cout<<endl<< "Please enter next action:";
Break
Default:break;
}
}
return 0;
}