アプリ版:「スタンプのみでお礼する」機能のリリースについて

キューから1文字をdequeuする関数
char dequeue(char *q,int *top,int *rear)
を作成し、関数の返り値はキューから取り出した文字(char)とする。enqueue関数でいくつか文字をキューに入れた後に、print_queue_ary関数によってキューの中身を出力した上で、dequeue関数を呼び出し、dequeueした文字を出力。また、再度print_queue_ary関数を呼び出し、データが1つを減っていることを確認するプログラムを作りたいのですが、あってますか?

#include <stdio.h>
#define MAX 128

struct data{
char key;
struct data *next;
};

struct queue{
struct data *top,*rear;
};

void print_queue_list(struct queue q);
void enqueue(struct queue *q,char key);
char dequeue(struct queue *q);

int main(){
struct queue q;
char x,s[MAX];
int i;
q.top=NULL;
q.rear=NULL;

printf("文字列を入力してください\n");
scanf("%s",&s);
for(i=0;i<strlen(s);i++){
enqueue(&q,s[i]);
}
print_queue_list(q);

printf(" [0] --> プログラムの終了\n");
printf(" [1] --> dequeueとキュー内容表示\n");
printf("[その他] --> 入力した文字のenqueueとキュー内容表示\n");

while(1){
scanf("%c",&x);
printf("\n");
if(x=='0') return 0;
else if(x=='1'){
printf("\ndequeueした文字: %c\n",dequeue(&q));
print_queue_list(q);
}
else{
enqueue(&q,x);
print_queue_list(q);
}
}
}


void print_queue_list(struct queue q){
if(q.top==NULL) printf("キューは空です.\n");
else{
printf("\n%c <---TOP",q.top->key);
if(q.top->next!=NULL){
while((q.top->next)!=NULL){
q.top=q.top->next;
printf("\n%c",q.top->key);
}
}
printf(" <---REAR\n");
}
}

void enqueue(struct queue *q,char key){
if(q->top==NULL){
q->top=(struct data *)malloc(sizeof(struct data));
q->top->key=key;
q->top->next=NULL;
q->rear=q->top;
}
else{
q->rear->next=(struct data *)malloc(sizeof(struct data));
q->rear->next->key=key;
q->rear->next->next=NULL;
q->rear=q->rear->next;
q->rear->next=NULL;
}
}

char dequeue(struct queue *q){
char c;
if(q->top==NULL){
printf("キューが空なのでdequeueできません.\n");
return '\0';
}
else{
c=q->top->key;
if(q->top->next==NULL){
q->top=NULL;
q->rear=NULL;
}
else q->top=q->top->next;

return c;
}
}

A 回答 (3件)

具体的にわからない点を記載して下さい。


大学の課題でしたら、質問は教員に。
    • good
    • 0

え?



「キューから1文字をdequeuする関数
char dequeue(char *q,int *top,int *rear)
を作成し」
というプログラムなんだから, その関数を作らなかったら「おかしい」と言われるのは当然でしょ?
    • good
    • 0

少なくとも


「キューから1文字をdequeuする関数
char dequeue(char *q,int *top,int *rear)
を作成し」
という問題に対する解答としては明らかにおかしい.
    • good
    • 0
この回答へのお礼

・・・・具体的にどこらへんがおかしいでしょうか?

お礼日時:2016/11/15 16:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!