单链队列[原创]
1
/*===========================单链队列=============================*/
2
#include <stdio.h>
3
#include <malloc.h>
4
5
typedef struct qnode{/*队列中结点类型的定义*/
6
char data;
7
struct qnode *next;
8
}qnode,*queptr;
9
10
11
typedef struct{ /*队列类型的定义*/
12
queptr front;
13
queptr rear;
14
}linkque;
15
16
17
/*=====================常用的被调用函数定义====================*/
18
void print(linkque l){ /*-在屏幕上输出单链队列的所有元素--*/
19
queptr t;
20
t=l.front;
21
if(t==l.rear){
22
printf("\nThe queue is empty..\n");
23
return 0;
24
}
25
26
printf("The queue :");
27
t=t->next;
28
while(t){
29
printf("%c-",t->data);
30
t=t->next;
31
}
32
printf("\n");
33
}
34
35
36
/*================对队列进行操作的函数定义======================*/
37
int initque(linkque *q){/*构造一个空队列*/
38
q->front=q->rear=(queptr)malloc(sizeof(struct qnode));
39
if(!q->front) return 0;
40
q->front->next=NULL;/**/
41
q->rear->next=NULL;
42
}
43
44
45
int destroyque(linkque *q){/*销毁队列*/
46
free(q->front);
47
free(q->rear);
48
free(q);
49
50
}
51
52
53
int clearque(linkque *q){/*清空队列*/
54
q->front=q->rear;
55
}
56
57
58
int queempty(linkque q){/*若队列为空,返回1*/
59
if(q.front==q.rear){
60
printf("the queue is empty");
61
return 1;
62
}
63
else return 0;
64
}
65
66
67
int quelength(linkque q){/*返回队列中元素的个数*/
68
int i=0;
69
queptr p;
70
p=q.front;
71
72
while(p->next!=NULL){
73
p=p->next;
74
i++;
75
}
76
return i;
77
}
78
79
80
char gethead(linkque q){/*返回对头元素*/
81
if(queempty(q)) return 0;
82
return q.front->next->data;
83
}
84
85
86
int entque(linkque *q,char e){ /*_入队函数(1)_*/
87
queptr p;
88
p=(queptr)malloc(sizeof(struct qnode));
89
if(!p) exit(0);
90
p->data=e;
91
p->next=NULL;
92
q->rear->next=p;
93
q->rear=p;
94
return 1;
95
}
96
97
98
int enque(linkque *q,char e){/*_入队函数(2)_*/
99
q->rear->next=(queptr)malloc(sizeof(struct qnode));
100
q->rear->next->data=e;
101
q->rear->next->next=NULL;
102
q->rear=q->rear->next;
103
return 1;
104
}
105
106
107
char delque(linkque *q){/*删除对头元素*/
108
char e;
109
if(!q->front->next){
110
printf("\nThe queue is empty,can not delete..");
111
return 0;
112
}
113
e=q->front->next->data;
114
q->front=q->front->next;
115
return e;
116
}
117
118
/*==================主函数部分================*/
119
main(){
120
int i;
121
char x,tem='A';
122
linkque *que,queue;
123
que=&queue;
124
125
initque(que);/*调用初始化函数构造空队列*/
126
print(queue);
127
128
for(i=1;i<=8;i++) enque(que,tem++);/*循环调用入队函数,向队尾插入元素*/
129
print(queue);
130
printf("There are %d elements in this queue\n",quelength(queue));
131
132
for(i=1;i<=7;i++) entque(que,tem++);
133
print(queue);
134
printf("There are %d elements in this queue\n",quelength(queue));
135
136
printf("The head element:%c\n",gethead(queue));
137
138
x=delque(que);
139
printf("After delque,"); print(queue);
140
printf("The deleted element: %c\n",x);
141
print(queue);
142
printf("The head element:%c\n",gethead(queue));
143
printf("There are %d elements in this queue\n",quelength(queue));
144
145
getch();
146
}
147
148
149
150
151
152
153
154
155
156
/*===========================单链队列=============================*/2
#include <stdio.h>3
#include <malloc.h>4

5
typedef struct qnode{/*队列中结点类型的定义*/6
char data;7
struct qnode *next;8
}qnode,*queptr;9

10

11
typedef struct{ /*队列类型的定义*/12
queptr front;13
queptr rear;14
}linkque;15

16

17
/*=====================常用的被调用函数定义====================*/18
void print(linkque l){ /*-在屏幕上输出单链队列的所有元素--*/19
queptr t;20
t=l.front;21
if(t==l.rear){22
printf("\nThe queue is empty..\n");23
return 0;24
}25

26
printf("The queue :");27
t=t->next;28
while(t){29
printf("%c-",t->data);30
t=t->next;31
}32
printf("\n");33
}34

35

36
/*================对队列进行操作的函数定义======================*/37
int initque(linkque *q){/*构造一个空队列*/38
q->front=q->rear=(queptr)malloc(sizeof(struct qnode));39
if(!q->front) return 0;40
q->front->next=NULL;/**/41
q->rear->next=NULL;42
}43

44

45
int destroyque(linkque *q){/*销毁队列*/46
free(q->front);47
free(q->rear);48
free(q);49

50
}51

52

53
int clearque(linkque *q){/*清空队列*/54
q->front=q->rear;55
}56

57

58
int queempty(linkque q){/*若队列为空,返回1*/59
if(q.front==q.rear){60
printf("the queue is empty");61
return 1;62
}63
else return 0;64
}65

66

67
int quelength(linkque q){/*返回队列中元素的个数*/68
int i=0;69
queptr p;70
p=q.front;71

72
while(p->next!=NULL){73
p=p->next;74
i++;75
}76
return i;77
}78

79

80
char gethead(linkque q){/*返回对头元素*/81
if(queempty(q)) return 0;82
return q.front->next->data;83
}84

85

86
int entque(linkque *q,char e){ /*_入队函数(1)_*/87
queptr p;88
p=(queptr)malloc(sizeof(struct qnode));89
if(!p) exit(0);90
p->data=e;91
p->next=NULL;92
q->rear->next=p;93
q->rear=p;94
return 1;95
}96

97

98
int enque(linkque *q,char e){/*_入队函数(2)_*/99
q->rear->next=(queptr)malloc(sizeof(struct qnode));100
q->rear->next->data=e;101
q->rear->next->next=NULL;102
q->rear=q->rear->next;103
return 1;104
}105

106

107
char delque(linkque *q){/*删除对头元素*/108
char e;109
if(!q->front->next){110
printf("\nThe queue is empty,can not delete..");111
return 0;112
}113
e=q->front->next->data;114
q->front=q->front->next;115
return e;116
}117

118
/*==================主函数部分================*/119
main(){120
int i;121
char x,tem='A';122
linkque *que,queue;123
que=&queue;124

125
initque(que);/*调用初始化函数构造空队列*/126
print(queue);127

128
for(i=1;i<=8;i++) enque(que,tem++);/*循环调用入队函数,向队尾插入元素*/129
print(queue);130
printf("There are %d elements in this queue\n",quelength(queue));131

132
for(i=1;i<=7;i++) entque(que,tem++);133
print(queue);134
printf("There are %d elements in this queue\n",quelength(queue));135

136
printf("The head element:%c\n",gethead(queue));137

138
x=delque(que);139
printf("After delque,"); print(queue);140
printf("The deleted element: %c\n",x);141
print(queue);142
printf("The head element:%c\n",gethead(queue));143
printf("There are %d elements in this queue\n",quelength(queue));144

145
getch();146
}147

148

149

150

151

152

153

154

155

156




浙公网安备 33010602011771号