キューから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;
}
}
No.2ベストアンサー
- 回答日時:
え?
「キューから1文字をdequeuする関数
char dequeue(char *q,int *top,int *rear)
を作成し」
というプログラムなんだから, その関数を作らなかったら「おかしい」と言われるのは当然でしょ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
strchr() の第2引数はなぜ int ...
-
CStringをwchar_tに変換したい
-
_TCHAR*での引数の読み込み
-
間接操作のレベルとは
-
fgetsなどのときのstdinのバッ...
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
ftoa の作り方
-
標準ライブラリ関数の自作につ...
-
c言語です。
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
構造体のアライメント調整
-
間接参照のレベルが異なっています
-
文字列から空白を取り除きたい...
-
起動時の引数の取得方法が分か...
-
コマンドラインに入力されてい...
-
配列をnビットシフトする
-
RGB→YUV変換のプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報