#3
by かずま » 7年前
解決策です。
コード:
#include <stdio.h>
#include <stdlib.h> // malloc, free, exit
struct node_t {
int data;
struct node_t *next;
};
typedef struct node_t Node;
Node *head = NULL;
Node *tail = NULL;
//int count = 0;
Node *new_node(int data)
{
Node *nd = (Node *)malloc(sizeof(Node));
if (nd == NULL) puts("malloc for NODE* failed."), exit(1);
nd->data = data;
nd->next = NULL;
return nd;
}
void enqueue(Node *node)
{
if (head == NULL) head = node;
else tail->next = node;
tail = node;
// count++;
}
Node *dequeue(void)
{
Node *p = head;
if (!p) puts("queue empty"), exit(1);
head = head->next;
if (!head) tail = NULL;
// count--;
return p;
}
void print_queue(void)
{
for (Node *e = head; e; e = e->next)
printf("| %d ", e->data);
printf("\n");
}
int main(void)
{
Node *e;
printf("enqueue(new_node(1000))\n"); enqueue(new_node(1000));
printf("enqueue(new_node(2000))\n"); enqueue(new_node(2000));
printf("enqueue(new_node(3000))\n"); enqueue(new_node(3000));
printf("enqueue(new_node(4000))\n"); enqueue(new_node(4000));
printf("enqueue(new_node(5000))\n"); enqueue(new_node(5000));
print_queue(); printf("\n");
e = dequeue(); printf("dequeue-> %d\n", e->data); print_queue(); free(e);
e = dequeue(); printf("dequeue-> %d\n", e->data); print_queue(); free(e);
e = dequeue(); printf("dequeue-> %d\n", e->data); print_queue(); free(e);
while (head) free(dequeue());
return 0;
}
理解できないところは質問してください。
解決策です。
[code=c]
#include <stdio.h>
#include <stdlib.h> // malloc, free, exit
struct node_t {
int data;
struct node_t *next;
};
typedef struct node_t Node;
Node *head = NULL;
Node *tail = NULL;
//int count = 0;
Node *new_node(int data)
{
Node *nd = (Node *)malloc(sizeof(Node));
if (nd == NULL) puts("malloc for NODE* failed."), exit(1);
nd->data = data;
nd->next = NULL;
return nd;
}
void enqueue(Node *node)
{
if (head == NULL) head = node;
else tail->next = node;
tail = node;
// count++;
}
Node *dequeue(void)
{
Node *p = head;
if (!p) puts("queue empty"), exit(1);
head = head->next;
if (!head) tail = NULL;
// count--;
return p;
}
void print_queue(void)
{
for (Node *e = head; e; e = e->next)
printf("| %d ", e->data);
printf("\n");
}
int main(void)
{
Node *e;
printf("enqueue(new_node(1000))\n"); enqueue(new_node(1000));
printf("enqueue(new_node(2000))\n"); enqueue(new_node(2000));
printf("enqueue(new_node(3000))\n"); enqueue(new_node(3000));
printf("enqueue(new_node(4000))\n"); enqueue(new_node(4000));
printf("enqueue(new_node(5000))\n"); enqueue(new_node(5000));
print_queue(); printf("\n");
e = dequeue(); printf("dequeue-> %d\n", e->data); print_queue(); free(e);
e = dequeue(); printf("dequeue-> %d\n", e->data); print_queue(); free(e);
e = dequeue(); printf("dequeue-> %d\n", e->data); print_queue(); free(e);
while (head) free(dequeue());
return 0;
}
[/code]
理解できないところは質問してください。