棧和佇列的有關操作
實驗二
實驗名稱:棧和佇列的有關操作 |
|
實驗室名稱: |
實驗臺號:14 |
學生姓名: |
專業班級: 2015 |
指導教師: |
實驗日期:2017-6-9 |
一、實驗目的
1、掌握棧、佇列的思想及其儲存實現。
2、掌握棧、佇列的常見演算法的程式實現。
二、實驗儀器及環境:
PC計算機;windows XP作業系統、Visual C++6.0、CodeBlocks
三、實驗內容及結果(按照具體實驗題目,按照如下格式書寫)
1、
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <time.h>
#define MAXSIZE 1000
using namespace std;
typedef struct{
int elem[MAXSIZE];
int top;
}Seqstack;
void Init(Seqstack *s){
s->top=-1;
return;
}
int Empty(Seqstack *s){
if(s->top==-1)
return 1;
return 0;
}
int Push(Seqstack *s,int x){
if(s->top==MAXSIZE-1)
return 0;
else{
s->top++;
s->elem[s->top]=x;
return 1;
}
}
int Pop(Seqstack *s,int *x){
if(s->top==-1)
return 0;
else{
*x=s->elem[s->top];
s->top--;
return 1;
}
}
int top(Seqstack *s){
int x;
if(s->top==-1)
return 0;
else{
x=s->elem[s->top];
return x;
}
}
int main()
{
Seqstack *s;
int x,num,st;
s=(Seqstack *)malloc(sizeof(Seqstack));
Init(s);
srand((unsigned)time(NULL));
cout<<"請輸入隨機數入棧的總數:";
cin>>num;
cout<<"入棧:";
while(num>0){
st=rand()%100+1;
Push(s,st);
num--;
cout<<st<<" ";
}
cout<<endl;
//Push(s,rand()%100+1);Push(s,rand()%100+1);Push(s,rand()%100+1);
cout<<"出棧:";
while(!Empty(s)){
cout<<top(s)<<" ";
Pop(s,&x);
}
cout<<endl;
return 0;
}
2、
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <time.h>
#define MAXSIZE 1000
using namespace std;
typedef struct{
int elem[MAXSIZE];
int top;
}Seqstack;
void Init(Seqstack *s){
s->top=-1;
return;
}
int Empty(Seqstack *s){
if(s->top==-1)
return 1;
return 0;
}
int Push(Seqstack *s,int x){
if(s->top==MAXSIZE-1)
return 0;
else{
s->top++;
s->elem[s->top]=x;
return 1;
}
}
int Pop(Seqstack *s,int &x){
if(s->top==-1)
return 0;
else{
x=s->elem[s->top];
s->top--;
return 1;
}
}
int top(Seqstack *s){
int x;
if(s->top==-1)
return 0;
else{
x=s->elem[s->top];
return x;
}
}
int main()
{
Seqstack *s;
int x,num=10,st,data,rr;
s=(Seqstack *)malloc(sizeof(Seqstack));
Init(s);
srand((unsigned)time(NULL));
cout<<"輸入一個十進位制整數:"<<endl;
cin>>data;
cout<<"輸入轉化的R進位制整數:"<<endl;
cin>>rr;
int res;
while(data){
Push(s,data%rr);
data/=rr;
}
//Push(s,rand()%100+1);Push(s,rand()%100+1);Push(s,rand()%100+1);
while(!Empty(s)){
Pop(s,x);
cout<<x;
}
return 0;
}
3、
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <time.h>
#define MAXSIZE 1000
using namespace std;
typedef struct{
int data[MAXSIZE];
int front_,rear_;
}Sequeue;
int Init(Sequeue *q){
if((q=((Sequeue *)malloc(sizeof(Sequeue))))==NULL)
return 0;
q->front_=MAXSIZE;
q->rear_=MAXSIZE;
return 1;
}
int Empty(Sequeue *q){
if(q->front_==q->rear_)
return 1;
else
return 0;
}
int InSequeue(Sequeue *q,int x){
if((q->rear_+1)%MAXSIZE==q->front_){
return -1;
}
else{
q->rear_=(q->rear_+1)%MAXSIZE;
q->data[q->rear_]=x;
return 1;
}
}
int OutSequeue(Sequeue *q,int *x){
if(q->front_==q->rear_){
return -1;
}
else{
q->front_=(q->front_+1)%MAXSIZE;
*x=q->data[q->front_];
return 1;
}
}
int main()
{
Sequeue *s;
int x,num,st;
s=(Sequeue *)malloc(sizeof(Sequeue));
Init(s);
srand((unsigned)time(NULL));
cin>>num;
while(num>0){
st=rand()%100+1;
InSequeue(s,st);
num--;
cout<<st<<" ";
}
cout<<endl;
//Push(s,rand()%100+1);Push(s,rand()%100+1);Push(s,rand()%100+1);
while(!Empty(s)){
OutSequeue(s,&x);
cout<<x<<" ";
}
cout<<endl;
return 0;
}
4、
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <time.h>
#define MAXSIZE 1000
using namespace std;
typedef struct{
int data[MAXSIZE];
int front_,rear_;
}Sequeue;
int Init(Sequeue *q){
if((q=((Sequeue *)malloc(sizeof(Sequeue))))==NULL)
return 0;
q->front_=0;
q->rear_=0;
return 1;
}
int Empty(Sequeue *q){
if(q->front_==q->rear_)
return 1;
else
return 0;
}
int InSequeue(Sequeue *q,int x){
if((q->rear_+1)%MAXSIZE==q->front_){
return -1;
}
else{
q->data[q->rear_]=x;
q->rear_=(q->rear_+1)%MAXSIZE;
return 1;
}
}
int OutSequeue(Sequeue *q,int *x){
if(q->front_==q->rear_){
return -1;
}
else{
*x=q->data[q->front_];
q->front_=(q->front_+1)%MAXSIZE;
return 1;
}
}
int GetHead(Sequeue *Q,int *x){
if(Q->front_==Q->rear_)
return 0;
*x=Q->data[Q->front_];
return 1;
}
void YangHuiTriangle( Sequeue *q,int N)
{
int n,i,x,temp;
Init(q);
InSequeue(q,1);
for(n=2;n<=N;n++)
{
InSequeue(q,1);
for(i=1;i<=n-2;i++)
{
OutSequeue(q,&temp);
cout<<temp<<" ";
GetHead(q,&x);
temp=temp+x;
InSequeue(q,temp);
}
OutSequeue(q,&x);
cout<<x<<" ";
InSequeue(q,1);
cout<<endl;
}
while(!Empty(q))
{
OutSequeue(q,&x);
cout<<x<<" ";
}
}
int main()
{
Sequeue *s;
int x,num=10,st;
s=(Sequeue *)malloc(sizeof(Sequeue));
Init(s);
int n=0;
cin>>n;
YangHuiTriangle(s,n);
return 0;
}
1、
2、
3、
4、
四、實驗心得體會:(包括遇到的問題及解決辦法)
結構體傳參時採用的是結構體的引用,迴圈佇列注意判斷隊滿和隊空的條件,注意堆疊和佇列資料進入和出去的方向。
五、指導教師意見及成績
簽名:
年 月 日