程式語言/98身心障礙 - 考試

Genevieve avatar
By Genevieve
at 2013-03-12T15:58

Table of Contents

分享這題的程式碼
方法是從堆疊拿出的書放入佇列
放回去的時候再從佇列取出放回堆疊
最後再放回所閱讀的書
程式碼很長,不知道有更簡潔的寫法嗎?
是用dev c++開發的

#include<iostream>
#define N 50

using namespace std;

struct Node{

int number;
char name[10];

};

struct Stack{

Node *stackpointer[N];
int sp;


};

struct Queue{

Node *queuepointer[N];
int rear;
int front;


};

int isempty(Stack *);
void push(Stack *,Node *);
Node* pop(Stack *);
void printBook(Stack *);
void readBook(Stack *,Queue *,int);
bool isQueueEmpty(Queue *);
void enQueue(Queue *,Node *);
Node* deQueue(Queue *);

int main(){

Stack s;
Queue q;
s.sp=-1;
q.rear=-1;
q.front=-1;

Node *ptr=new Node;

strcpy(ptr->name,"書本5");
ptr->number=5;
push(&s,ptr);

ptr=new Node;
strcpy(ptr->name,"書本4");
ptr->number=4;
push(&s,ptr);

ptr=new Node;
strcpy(ptr->name,"書本3");
ptr->number=3;
push(&s,ptr);

ptr=new Node;
strcpy(ptr->name,"書本2");
ptr->number=2;
push(&s,ptr);

ptr=new Node;
strcpy(ptr->name,"書本1");
ptr->number=1;
push(&s,ptr);

cout<<"書本原始序列:"<<endl;
printBook(&s);

cout<<"input read serial(請輸入3本書):\n";
int input[3];
int tmp;
for(int i=0;i<3;i++){
cin>>tmp;
input[i]=tmp;
}

for(int i=0;i<3;i++){

switch(input[i]){

case 1:
cout<<endl;
readBook(&s,&q,1);
printBook(&s);
break;
case 2:
cout<<endl;
readBook(&s,&q,2);
printBook(&s);
break;
case 3:
cout<<endl;
readBook(&s,&q,3);
printBook(&s);
break;
case 4:
cout<<endl;
readBook(&s,&q,4);
printBook(&s);
break;
case 5:
cout<<endl;
readBook(&s,&q,5);
printBook(&s);
break;
}



}



system("pause");
return 0;

}



void push(Stack *p,Node *x){

p->sp++;
p->stackpointer[p->sp]=x;

}


Node* pop(Stack *p){

if(isempty(p))
cout<<"堆疊已空"<<endl;
else
return p->stackpointer[p->sp--];


}

int isempty(Stack *p){
if(p->sp==-1)
return 1;
else
return 0;
}

void enQueue(Queue *p,Node *x){

p->rear++;
p->queuepointer[p->rear]=x;

}

Node* deQueue(Queue *p){

p->front++;
return p->queuepointer[p->front];

}

bool isQueueEmpty(Queue *p){
if(p->rear==p->front)
return true;
else
return false;
}

void printBook(Stack *p){

for(int i=p->sp;i>=0;i--){
cout<<p->stackpointer[i]->name<<endl;

}

}

void readBook(Stack *s,Queue *q,int x){

Node *tmp;
Node *readbook;
bool flag=false;

for(int i=s->sp;i>=0&&flag==false;i--){

if(s->stackpointer[i]->number!=x){
tmp=pop(s);
enQueue(q,tmp);
}
else{
cout<<"讀了這本書: "<<s->stackpointer[i]->name<<endl;
readbook=pop(s);
flag=true;
}

}


while(!isQueueEmpty(q)){

tmp=deQueue(q);
push(s,tmp);

}

push(s,readbook);

}

--
Tags: 考試

All Comments

92身障三等 經濟學 貨幣乘數

Barb Cronin avatar
By Barb Cronin
at 2013-03-12T15:27
三、請回答下列有關總體經濟理論的問題: (2)政府放寬資金進出之後,民眾的存款不再僅限於存在國內的銀行,亦可以將款項匯出至 國外,存在國外的銀行;如此一來,貨幣乘數將如何變動?變大或變小?為什麼?請以 50%款項存在國內銀行,50%款項存在國外銀行為例說明之。 從貨幣乘數的定義公式很容易可得到貨幣乘數會變小 ...

刑法'法規要旨'的新舊名稱差異~

Mia avatar
By Mia
at 2013-03-12T14:56
請問申論中有關法條後附註的and#34;法規要旨and#34;應該要寫最新的嗎?還是沒有差別? 例如: 刑法分則中185-3之前叫做and#34;醉態駕駛罪and#34;,而目前最新的法典以改成and#34;重大違背義務致交通 危險罪and#34; 185-4and#34;交通肇事逃逸罪and#34;=a ...

程式語言/98身心障礙

Charlotte avatar
By Charlotte
at 2013-03-12T14:53
五、桌上有N本書成一疊,當閱讀其中某本書的時候,會逐本將壓在該本書上的書照順 序由上而下的移開,並且按照移開的順序先將它們放在旁邊,然後取走想要看的書; 當閱讀完畢以後,會將剛才移開的書逐本逆向放回,並且將看完的書本放在最上面, 例如桌上有五本書: 書本 1 書本 2 書本 3 書本 4 書本 5 ...

101年地特4等台北市-人事行政上榜

Dinah avatar
By Dinah
at 2013-03-12T14:05
回顧一下剛開始準備的成績: 99年普考 國文65、法緒80、行政法64、行政學58 這是函授剛買、剛開箱不久,剛聽完國文、公文、法緒 就想說反正決定要考,還是報名感覺一下氣氛。 所以考銓跟心理學直接缺考。 99年地特四等 國文39、法緒82、行政法82、行政學54 考銓和心理學一樣缺考。 99年3月我從澳洲 ...

記帳士會計科目

Zanna avatar
By Zanna
at 2013-03-12T13:47
剛剛去電考選部 確定今年記帳士考試會計部份一樣考舊的 所以不是IFRS喔~ 他說今年初有跟相關學者、公會討論,他們說還用不到IFRS~= = 所以分享給正在準備的人 不過他說日後如有變動會在考選部網站公告 -- (\/)at at(\/) - ...