-
Notifications
You must be signed in to change notification settings - Fork 0
/
crQUEUE.h
130 lines (117 loc) · 1.77 KB
/
crQUEUE.h
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
#include "stdio.h"
#include "malloc.h"
class crQUEUE //循环队列
{
int *que; //队列名
int front,rear;//队头、队尾指示器
int max; //队列容量
public:
crQUEUE(int n);//构造
~crQUEUE(); //析构
int InQueue(int e); //进入队列
int DeQueue(int &e);//离开队列
void print(); //输出队列元素
int GetLength(); //获取队列长度
int GetHead(); //获取队头元素
int GetTail(); //获取队尾元素
};
crQUEUE::crQUEUE(int n)
{
que=(int *)malloc(n*sizeof(int));
if(que==0){printf("空间分配失败\n");return;}
front=rear=0;
max=n;
}
crQUEUE::~crQUEUE()
{
if(que)
{
free(que);
que=0;
}
}
int crQUEUE::InQueue(int e)
{
if((rear+1)%max==front){printf("队列已满,无法进入队列\n");return 0;}
que[rear]=e;
rear=(rear+1)%max;
return 1;
}
int crQUEUE::DeQueue(int &e)
{
if(rear==front){printf("空队列,无元素出队列\n");return 0;}
e=que[front];
front=(front+1)%max;
return 1;
}
void crQUEUE::print()
{
if(front==rear)
printf("空队列\n");
else
{
int i=front;
while(i!=rear)
{
printf("%d ",que[i]);
i=(i+1)%max;
}
}
printf("\n");
}
/*
void crQUEUE::print()
{
if(rear>front)
{
for(int i=front;i<rear;i++)
printf("%d ",que[i]);
}
else
{
for(int i=front;i<max-fabs(rear-front);i++)
printf("%d ",que[i]);
}
printf("\n");
}
*/
int crQUEUE::GetLength()
{
return (rear-front+max)%max;
}
int crQUEUE::GetHead()
{
return que[front];
}
int crQUEUE::GetTail()
{
return que[(rear-1+max)%max];//return que[rear-1];
}
//
//void main()
//{
//
// crQUEUE q(5);
// int e;
//
// q.InQueue(10);
// q.InQueue(20);
// q.InQueue(30);
// q.InQueue(40);
//
// q.DeQueue(e);
// printf("e=%d\n",e);
// q.DeQueue(e);
// printf("e=%d\n",e);
//
// q.print();
//
// q.InQueue(50);
// q.InQueue(60);
//
// printf("%d\n",q.GetTail());
//
//
// q.print();
//}
//