主题:入栈
bbyen
[专家分:0] 发布于 2002-11-28 23:11:00
往数组中读入10个整数,并逐个压入栈,打印原始表并通过弹出元素的方法打印栈内容(请注意,第二次打印时元素应按逆序列出)
回复列表 (共5个回复)
沙发
lanjingquan [专家分:510] 发布于 2002-11-29 12:47:00
我在前面的文章有帖过一个栈的模板,你直接调用就行了
板凳
木头人 [专家分:0] 发布于 2002-11-29 18:49:00
给你一个例子
#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 楼
bbyen [专家分:0] 发布于 2002-12-01 14:47:00
TO:lanjingquan
那里有那个栈的模板!呀!我找不到呀!
4 楼
lanjingquan [专家分:510] 发布于 2002-12-17 22:26:00
#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 楼
yiminggw [专家分:0] 发布于 2003-05-08 20:33:00
up
我来回复