#include <stdio.h>
#include <stdlib.h>
// 構造体宣言
// スタック用
typedef struct stack{
int val;
struct stack* next;
} STACK;
// キュー用
typedef struct node{
int val;
struct node* next;
} NODE;
typedef struct queue{
【①】// 「先頭」を表すポインタの宣言
【②】// 「末尾」を表すポインタの宣言
} QUEUE;
// プロトタイプ宣言
STACK* push(STACK* stack, int val); // スタック用
int pop(STACK** stack);
QUEUE* enqueue(QUEUE* queue, int val); // キュー用
int dequeue(QUEUE** queue);
// メイン関数
int main(int argc, char** argv){
STACK *stack = NULL; // スタック
QUEUE *queue = NULL; // キュー
int i, val;
// スタック・キューへの初期値格納
int init[] = {1, 2, 3};
for(i = 0 ; i < 3 ; i++){
stack = push(stack, init[i]);
queue = enqueue(queue, init[i]);
}
printf("\n");
// push&popテスト
printf("スタック1つめ: %d\n", pop(&stack));
printf("スタック2つめ: %d\n", pop(&stack));
// 標準入力による値の追加
scanf("%d", &val);
stack = push(stack, val);
scanf("%d", &val);
stack = push(stack, val);
printf("スタック残り: \n");
for(i = 0 ; i < 3 ; i++){
printf("\t%d\n", pop(&stack));
}
printf("\n");
// enqueue&dequeueテスト
printf("キュー1つめ: %d\n", dequeue(&queue));
printf("キュー2つめ: %d\n", dequeue(&queue));
// 標準入力による値の追加
scanf("%d", &val);
queue = enqueue(queue, val);
scanf("%d", &val);
queue = enqueue(queue, val);
printf("キュー残り: \n");
for(i = 0 ; i < 3 ; i++){
printf("\t%d\n", dequeue(&queue));
}
printf("\n");
return 0;
}
// プッシュ関数
STACK* push(STACK* stack, int val){
STACK* tmpstack;
tmpstack = 【③】; // スタック初期化
tmpstack->val = val;
【④】 // stackがtmpstackの次に来るように代入
return tmpstack;
}
// ポップ関数
int pop(STACK** stack){
int tmpval;
if(*stack != NULL){
tmpval = (*stack)->val;
【⑤】 // stackをひとつ進めてpop処理を実行
}
return tmpval;
}
// キュー挿入関数
QUEUE* enqueue(QUEUE* queue, int val){
// キューが空のとき
if(queue == NULL){
queue = 【⑥】; // キュー初期化
queue->head = (NODE*)malloc(sizeof(NODE));
queue->head->val = val;
【⑦】; // キューの末尾初期値として先頭アドレスを代入
}
// キューが空でないとき
else{
【⑧】 // 末尾の次に新規ノードの領域割り当て
queue->tail->next->val = val;
queue->tail = queue->tail->next;
}
return queue;
}
// キュー取り出し関数
int dequeue(QUEUE** queue){
int tmpval;
【⑨】 // tmpvalに先頭ノードの値を渡す
(*queue)->head = (*queue)->head->next;
return tmpval;
}
①int *head;
②int *tail;
③(NODE*)malloc(sizeof(NODE));
④tmpstack->next = stack;
⑤pop(stack++);
⑥(NODE*)malloc(sizeof(NODE));
⑦queue->tail = queue->head
⑧queue->tail->next;
⑨tmpval = queue->head;
を入れてますが⑧と⑨は違うんだろうなと思っています。良ければ教えてください。