0 x 00データ構造——C言語実現(キュー)
0 x 00データ構造——C言語実現(キュー)
実現する
実現する
/*
,
(enqueue), ( (rear)) ,
(dequeue), ( ) ( (front)) 。
dequeue(Q) enqueue(Q,X)
=================
| |
#ifndef QUEUE_H
#define QUEUE_H
typedef enum {
false = 0,
true
} BOOL;
struct node;
typedef struct node node;
typedef node *pos;
typedef node *queue;
// ;
queue create_queue(void);
// ;
BOOL is_empty(queue Q);
// ;
BOOL is_full(queue Q);
// ;
BOOL set_empty(queue Q);
// ;
BOOL delete_queue(queue *Q);
// ;
int dequeue(queue Q);
// ;
int front_queue(queue Q);
// ;
void enqueue(queue Q, int x);
// ;
void print_queue(queue Q);
#endif
#include
#include
#include "queue.h"
#define MAXQUEUE 100
struct node {
int val;
struct node *next;
struct node *pre;
};
//struct node;
//typedef struct node node;
//typedef node *pos;
//typedef node *queue;
// ;
queue create_queue(void)
{
queue tmp = (queue)malloc(sizeof(node));
tmp->val = 0;
tmp->next = NULL;// next
tmp->pre = NULL;// pre
return tmp;
}
// ;
BOOL is_empty(queue Q)
{
return (Q->val == 0);
}
// ;
BOOL is_full(queue Q)
{
return (Q->val == MAXQUEUE);
}
// ;
BOOL set_empty(queue Q)
{
node *tmp = Q->next;
while(tmp!=NULL) {
(tmp->pre)->next = tmp->next;
(tmp->next)->pre = tmp->pre;
free(tmp);
(Q->val)--;
tmp = Q->next;
}
return true;
}
// ;
BOOL delete_queue(queue *Q)
{
set_empty(*Q);
free(*Q);
*Q = NULL;
return true;
}
// ;
int dequeue(queue Q)
{
if(is_empty(Q)) {
printf("Q is empty
");
return -1;
}
node *tmp = Q->next;
int r = tmp->val;
Q->next = tmp->next;
if(tmp->next != NULL) {
(tmp->next)->pre = NULL;
}
(Q->val)--;
return r;
}
// ;
int front_queue(queue Q)
{
return (Q->next)->val;
}
// ;
void enqueue(queue Q, int x)
{
if(is_full(Q)) {
printf("Q is full
");
}
node *tmp = (queue)malloc(sizeof(node));
tmp->val = x;
if(Q->pre != NULL) {
(Q->pre)->next = tmp;
tmp->pre = (Q->pre);
tmp->next = NULL;
Q->pre = tmp;
} else {
tmp->pre = NULL;
tmp->next =NULL;
Q->pre = tmp;
Q->next = tmp;
}
(Q->val)++;
}
// ;
void print_queue(queue Q)
{
node *tmp = Q->next;
if(tmp == NULL) {
printf("->");
} else {
while(tmp != NULL) {
printf("->%d", tmp->val);
tmp = tmp->next;
}
}
printf("
");
}
実験#include
#include
#include "queue.h"
int main()
{
queue Q;
int i;
Q = create_queue();
for(i = 0; i<10; i++) {
print_queue(Q);
enqueue(Q, i);
}
while(!is_empty(Q)) {
dequeue(Q);
print_queue(Q);
}
return 0;
}
実験結果->
->0
->0->1
->0->1->2
->0->1->2->3
->0->1->2->3->4
->0->1->2->3->4->5
->0->1->2->3->4->5->6
->0->1->2->3->4->5->6->7
->0->1->2->3->4->5->6->7->8
->1->2->3->4->5->6->7->8->9
->2->3->4->5->6->7->8->9
->3->4->5->6->7->8->9
->4->5->6->7->8->9
->5->6->7->8->9
->6->7->8->9
->7->8->9
->8->9
->9
->
Time elapsed: 000:00:031
Press any key to continue