👌
C言語 データ構造 構造体を使ったQueue
学んだことのまとめのつもりなので間違えてるとこがありましたら、教えていただけると助かります!
構造体(Struct)を使ったQueue
Queueとは?
- 一番最初に入れたデータを一番最初に取り出すもの。
- (First In First Out)
- データを入れると一番手前にくる
- データを取り出すときは Queue の中にある一番古いデータ(一番下にあるデータ)からしか取り出せない
- データを追加することを enqueue という
- データを取り出すことを dequeue という
簡単なコードの説明
- void* create_newnode() で新しく追加したいデータのノードを作成
- void enqueue() データをtailに追加
- void dequeue() データをtopから取り出す
- print_queue() Queueの中のデータを確認
実行結果
top --> John --> tail
top --> John --> Robert --> tail
top --> Robert --> tail
top --> Robert --> James --> tail
コード
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct NODE{
char name[16];//16byte
struct NODE *next;//8byte
//合計は 16+8=32 24byte
}node;
static node *top=NULL;
static node *tail=NULL;
void* create_newnode(char *name){
node *newnode;
newnode=malloc(sizeof(node));//24Byte分のメモリを割り当てる
//printf(" 割り当てられたメモリは %d Byte\n",sizeof(node));
strcpy(newnode->name,name);
newnode->next=NULL;
return newnode;
}
void enqueue(char *name){
node *newnode;
newnode=create_newnode(name);
if(top==NULL){
top=newnode;
tail=newnode;
}else{
tail->next=newnode;
tail=newnode;
}
}
void dequeue(){
if(top==NULL){
printf("!-- Queue is Empty --!\n");
return;
}else{
node *temp;
temp=top;
top=top->next;
free(temp);//確保していたメモリを解放
}
}
void print_queue(){
node *ptr;
ptr=top;
printf("top --> ");
while(ptr!=NULL){
printf("%s --> ",ptr->name);
ptr=ptr->next;
}
printf("tail\n");
}
int main(void) {
enqueue("John");
print_queue();
enqueue("Robert");
print_queue();
dequeue();
print_queue();
enqueue("James");
print_queue();
}
Discussion