スタックとキューの違いを示すプログラム。
学校でスタックとキューの違いを示せという課題が出たのですが、どうしてもわからなかったので、苦し紛れに質問させていただきました…。
いろいろ情報を集めて分からないながらにも以下のプログラムを書いてみたのですがスタックはできてもキューが実現できません。
あまり内部の処理を書き変えずに以下のスタックのプログラムをキューに書き換えたいのですがどうしたらいいでしょうか?
ポインタを利用した連結リスト構造です。
#include <stdio.h>
#include <stdlib.h>
struct Cell//構造体Cellの定義
{
int element;
Cell* p_prev;
Cell* p_next;
};
void Cell_Initialize(Cell* p)//要素を初期化用
{
p->element = -1;
p->p_next = NULL;
p->p_prev = NULL;
}
void Push(Cell* p, int val)
{
Cell* p_temp = p;
while(1)
{
if(p != NULL)
{
if(p_temp->p_next == NULL)
{
p_temp->p_next = (Cell*)malloc(sizeof(Cell));//新しいセルを作成するときのメモリの確保
Cell_Initialize(p_temp->p_next);//初期化
p_temp->p_next->element = val;
p_temp->p_next->p_prev = p_temp;
break;
}
else
{
p_temp = p_temp->p_next;
}
}
}
}
int Pop(Cell* p)
{
Cell* p_temp = p;
int temp;
while(1)
{
if(p != NULL)
{
if(p_temp->p_next == NULL)
{
break;
}
else
{
p_temp = p_temp->p_next;
}
}
}
if(p_temp->p_prev != NULL)
{
temp = p_temp->element;
p_temp->p_prev->p_next = NULL;
free(p_temp);
p_temp = NULL;
return temp;
}
else if(p_temp->element != -1)
{
temp = p_temp->element;
Cell_Initialize(p_temp);
return temp;
}
return -1;
}
void main()
{
Cell* p_list = NULL;
p_list = (Cell*)malloc(sizeof(Cell));
Cell_Initialize(p_list);
for(int i = 1; i < 7; i++)
{
int temp;
printf("%d文字目入力してください:",i);
scanf("%d",&temp);
Push(p_list, temp);
}
while(1)
{
int temp = Pop(p_list);
if(temp != -1)
{
printf("[%d]\n\n",temp);
}
else
{
break;
}
}
}
長文になってしまいすみません。
どなたかよろしくお願いします。