回 帖 发 新 帖 刷新版面

主题:入栈

 往数组中读入10个整数,并逐个压入栈,打印原始表并通过弹出元素的方法打印栈内容(请注意,第二次打印时元素应按逆序列出)

回复列表 (共5个回复)

沙发

我在前面的文章有帖过一个栈的模板,你直接调用就行了

板凳

   给你一个例子
#include "iostream.h"
class LinkList {
typedef struct node
{
int date;
struct node *next;
} ListDateNode;
typedef ListDateNode *ListDate;

   protected:
      int count;
      ListDate dateLinkHead, dateLinkTail;
              static ListCount;
   public:
  LinkList(void); 
  virtual ~LinkList(void);

  void putTail (int newDate);
  void putHead (int newDate);
  int  getHead (void);      

  int  peekHead(void){ return dateLinkHead->date;}  
                   

  bool empty ( ){ return (count==0) ; }            
  int  getElemCount( ){ return count;}
                  
  static int getListNumber( ){ return ListCount;}                    
};//队列类

class Queue:public LinkList{
public:
void EnQueue(int newDate);//在队尾加入一个新元素
int  DelQueue(void);//在队尾退出一个元素
int GetQueueLength( ){ return getElemCount( );}//取队列长度
void PrintQueue( );//输出队列中的内容
};
//栈类
class Stack:public LinkList{
public:
void Push(int newDate){ putHead(newDate);}//在栈中压入一个元素
int Pop(void){ return getHead();}//在栈顶取出一个元素
int Top(void){ return peekHead();}//取栈顶元素值但不退出该元素
void PrintStack();//输出栈中内容
};
//构造函数定义
LinkList::LinkList(void)
{
count=0;
    dateLinkHead=dateLinkTail=NULL;
ListCount++;
}
LinkList::~LinkList(void)//析构函数定义
{
ListDateNode *p=dateLinkHead;
while((p=dateLinkHead)!=NULL)
{
dateLinkHead=dateLinkHead->next;
delete p;//释放空间
}
}

//在尾部加入一个新元素
void LinkList::putTail(int newDate)
{
ListDateNode *pNew=new ListDateNode;//建立一个新结点
if(pNew==NULL)
{
cout<<"memory Insufficient";
return;
}
pNew->date=newDate;
pNew->next=NULL;
if(dateLinkTail==NULL)//列表为空结点成为新结点
dateLinkHead=dateLinkTail=pNew;
else
{
dateLinkTail->next=pNew;//列表不空将结点插入到链表中
dateLinkTail=pNew;
}
count++;
}
//在表头加入一个新元素

void LinkList::putHead(int newDate)
{
ListDateNode *pNew=new ListDateNode;//建立一个新结点
    if(pNew==NULL)
{
cout<<"memory Insufficient";
return;
}
pNew->date=newDate;
pNew->next=dateLinkHead;
dateLinkHead=pNew;

if(dateLinkTail==NULL)
    dateLinkTail=pNew;
count++;
}
int LinkList::getHead(void)
{
ListDateNode *pNode=dateLinkHead;
int retVal=pNode->date;
if(dateLinkHead==dateLinkTail)
dateLinkHead=dateLinkTail=NULL;
else
dateLinkHead=dateLinkHead->next;
count--;
  //释放结点空间
delete pNode;
return retVal;
}//队列的成员函数的定义

void Queue::EnQueue(int newDate)
{
putTail(newDate);
}

int Queue::DelQueue(void)
{
return getHead();
}

void Queue::PrintQueue()
{
ListDateNode *pNode=dateLinkHead;
cout<<"Queue head-->";
while(pNode!=NULL)
{
cout<<pNode->date;
pNode=pNode->next;
if(pNode!=NULL)
cout<<":";
}
cout<<endl<<endl;
}
//栈的成员函数的定义
void Stack::PrintStack()
{
cout<<"Stack member:"<<endl<<endl;

ListDateNode *pNode=dateLinkHead;
while(pNode!=NULL)
{
cout<<"|"<<pNode->date<<"|";
pNode=pNode->next;
cout<<endl;
}
}



int LinkList::ListCount=0;
void main() {
Queue *q1 = new Queue;
Stack *s1 = new Stack;
      cout << "Total Lists:" << LinkList::getListNumber() <<endl<<endl;
for (int i = 0; i < 4; i++)
{
q1->EnQueue(i);
s1->Push(i);
}
cout << "Queue length:" << q1->GetQueueLength() <<endl<<endl;
q1->PrintQueue();
cout << "Stack top: " << s1->Top()<<endl<<endl;
s1->PrintStack();
for (i = 0; i < 4; i++)
{
q1->DelQueue();
s1->Pop();
}
cout << "Queue length:" << q1->GetQueueLength() <<endl<<endl;
cout << "Stack empty:";
if (s1->empty())
cout << "Yes(栈为空)";
else
cout << "No(栈不为空)";  
cout <<endl<<endl;

delete q1;
delete s1;
    cout << "Total Lists:" << LinkList::getListNumber() <<endl<<endl;
}




3 楼

TO:lanjingquan
那里有那个栈的模板!呀!我找不到呀!

4 楼

#include<iostream.h>

template<class T>class STACK
{
public:
STACK();
bool isEmpty();
void push(T);
T pop();
~STACK();
private:
struct node
{
T readIn;
node* before;
};

node* head;
node* ps;
};


//           函数体定义
////////////////////////////////////////////////////////////////////////

template<class T>
STACK<T>::STACK()
{
ps=new node;
head=NULL;
}

template<class T>
bool STACK<T>::isEmpty()
{
if(head==NULL)
return 1;
else
return 0;
}

template<class T>
void STACK<T>::push(T in)
{
if(head==NULL)
{
ps->before=NULL;
head=ps;
}
else
{
ps->before=head;
head=ps;
}

head->readIn=in;
ps=new node;
}

template<class T>
T STACK<T>::pop()
{
if(head==NULL)
{
cout<<"error in stack!"<<endl;
return 0;
}

T temp=head->readIn;
node* t=head;
head=head->before;
delete t;
return temp;
}

template<class T>
STACK<T>::~STACK()
{
delete ps;
if(head!=NULL)
while(head==NULL)
{
node* h=head;
head=head->before;
delete h;
}
}

5 楼

up

我来回复

您尚未登录,请登录后再回复。点此登录或注册