-
Notifications
You must be signed in to change notification settings - Fork 306
/
Copy pathquenen.c
131 lines (105 loc) · 2.36 KB
/
quenen.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/**
* 简单队列,从头插入,从尾取
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct queue_element_
{
char *data;
struct queue_element_ *next;
struct queue_element_ *last;
} queue_element;
typedef struct queue_list_
{
int size;
queue_element *head;
queue_element *tail;
} queue_list;
void queue_init(queue_list *queue)
{
queue->size = 0;
queue->head = NULL;
queue->tail = NULL;
}
int queue_insert(queue_list *queue, char *str)
{
queue_element *new_node = (queue_element *)malloc(sizeof(queue_element));
if (!new_node) {
return -1;
}
new_node->data = strdup(str);
new_node->last = NULL;
//队列为空
if (0 == queue->size
&& NULL == queue->head
&& NULL == queue->tail) {
new_node->next = NULL;
(queue->size)++;
queue->head = new_node;
queue->tail = new_node;
return 0;
}
//队列不为空
(queue->size)++;
queue->head->last = new_node;
new_node->next = queue->head;
queue->head = new_node;
return 0;
}
int queue_get(queue_list *queue, char **str)
{
if (0 == queue->size) {
str = NULL;
return -1;
}
queue_element *tail = queue->tail;
*str = tail->data;
if (1 == queue->size) {
queue->head = NULL;
queue->tail = NULL;
} else {
tail->last->next = NULL;
queue->tail = tail->last;
}
free(tail);
(queue->size)--;
return 0;
}
void queue_apply(queue_list *queue)
{
queue_element *p = queue->head;
if (queue->size ==0) {
printf("this queue size is 0\n");
exit(-1);
}
while (p) {
printf("%s\n", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
queue_list *queue;
char *data;
queue = (queue_list *)malloc(sizeof(queue_list));
queue_init(queue);
queue_insert(queue, "hello");
queue_insert(queue, "my");
queue_insert(queue, "name");
queue_insert(queue, "is");
queue_insert(queue, "hua");
queue_insert(queue, "sheng");
queue_insert(queue, "!");
queue_insert(queue, "你");
queue_insert(queue, "是");
queue_insert(queue, "谁?");
queue_apply(queue);
while (queue->size) {
queue_get(queue, &data);
printf("%s\n", data);
free(data);
}
free(queue);
}