?? linearstack2.txt
字號:
//鏈式堆棧的類定義linearStack2.h
const int LEN=40;
typedef struct Stack{
ElemType data;
struct Stack *next;
}StackNode;//結點數據類型
class LinStack
{private:
StackNode *top;//指向棧頂的指針
int size;// 堆棧的結點個數
public:
//構造函數
LinStack();
//初始化棧,分配存儲空間并置空
void InitStack(int);
//創建有序或無序棧
void CreateStack(int m=LEN,int mark=0);
//返回堆棧的結點個數
int StackSize();
//清空棧
void ClearStack();
//刪除棧
void DeleteStack();
//檢查棧是否為空
bool StackEmpty();
//讀取棧頂元素
ElemType Peek();
//向棧中插入元素
void Push(const ElemType&);
//從棧中刪除元素
ElemType Pop();
//檢查棧是否已滿
bool StackFull(ElemType m=LEN);
//棧的輸出
void StackPrint(ElemType m=LEN);
};
// 鏈式堆棧的實現linearStack2.cpp
#include "linearStack2.h"
//構造函數
LinStack::LinStack()
{top=NULL;size=0;}
//初始化棧,分配存儲空間并置空
void LinStack::InitStack(int L)
{top=new StackNode[L];
size=0;
}
//創建有序或無序棧
void LinStack::CreateStack(int m,int mark)
{ElemType x,a[LEN];
for(int i=0;i<m;i++) a[i]=random(215+i)%100;
for(int i=0;i<m-1;i++)
{int k=i;
for(int j=i+1;j<m;j++)
if(a[k]>a[j]) k=j;
if(k!=i)
{x=a[k];a[k]=a[i];a[i]=x;}}
for(int i=0;i<m;i++)
if(mark==1) Push(a[m-1-i]);//升序
else
if(mark==-1) Push(a[i]);//降序
else Push(rand()%100);//無序
}
int LinStack::StackSize()
{return size;}
//清空棧
void LinStack::ClearStack() {size=0;}
//刪除棧
void LinStack::DeleteStack()
{delete top;}
//檢查棧是否為空
bool LinStack::StackEmpty() {return size==0;}
//讀取棧頂元素
ElemType LinStack::Peek()
{ return top->data;}
//向棧中插入元素
void LinStack::Push(const ElemType& item)
{StackNode *newNode=new StackNode;
newNode->data=item;newNode->next=top;
top=newNode;
size++;
}
//從棧中刪除元素
ElemType LinStack::Pop()
{if(size==0) {
cerr<<"棧為空!"<<endl;exit(1);}
StackNode *p=top->next;
ElemType data=top->data;
delete top;
size--;
top=p;
return data;
}
//檢查棧是否已滿
bool LinStack::StackFull(ElemType m)
{return size==m;}
//棧的輸出
void LinStack::StackPrint(ElemType m)
{for(int i=0;i<m;i++)
cout<<setw(3)<<Pop(); }
// 鏈式堆棧的測試linearStack2m.cpp
#include<iostream.h>
#include<iomanip.h>
typedef int ElemType;
#include "linearStack2.cpp"
void main()
{cout<<"linearStack2m.cpp運行結果:\n";
int m;
LinStack q,p,w;
cout<<"輸入欲構造棧q的長度m:";cin>>m;
cout<<"創建棧q(升序):\n";
q.CreateStack(m,1);
cout<<"q棧的結點個數="<<q.StackSize()<<endl;
cout<<"\n輸出q棧元素:\n";
q.StackPrint(m);cout<<endl;
cout<<"q棧:";
if(q.StackFull(m)==1)
cout<<"已滿!\n";
else cout<<"未滿!\n";
cout<<"創建棧p(降序):\n";
p.CreateStack(m,-1);
cout<<"p棧:";
if(p.StackFull(m)==1)
cout<<"已滿!\n";
else cout<<"未滿!\n";
cout<<"刪除元素為:"<<p.Pop()<<endl;
cout<<"p棧:";
if(p.StackEmpty()==1)
cout<<"為空!\n";
else cout<<"為非空!\n";
cout<<"輸出p棧元素:\n";
p.StackPrint(m-1);cout<<endl;
cout<<"創建棧w(無序):\n";
w.CreateStack(m);
cout<<"輸出w棧元素:\n";
w.StackPrint(m);cout<<endl;
p.ClearStack();
p.DeleteStack();
cin.get();cin.get();}
linearStack2m.cpp運行結果:
輸入欲構造棧q的長度m:10
創建棧q(升序):
q棧的結點個數=10
輸出q棧元素:
8 19 32 47 48 63 66 78 93 94
q棧:未滿!
創建棧p(降序):
p棧:已滿!
刪除元素為:99
p棧:為非空!
輸出p棧元素:
86 79 56 45 41 40 36 6 6
創建棧w(無序):
輸出w棧元素:
59 6 67 29 97 80 44 39 37 29
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -