Update 7.队列的链式存储实现.c

This commit is contained in:
H1206950012
2020-02-11 19:49:30 +08:00
committed by GitHub
parent e32a4e3eb2
commit 3d5327f05a

View File

@@ -7,16 +7,16 @@ struct Node{
struct Node *Next;
};
struct QNode{
struct Node *rear; // 指向队尾结点
struct Node *front; // 指向队头结点
struct Node *rear; // 指向队尾结点
struct Node *front; // 指向队头结点
};
Queue CreateQueue(); // 初始化队列
void AddQ(Queue Q,ElementType item); // 入队
ElementType DeleteQ(Queue Q); // 出队
int IsEmpty(Queue Q); // 判断队列是否为空
Queue CreateQueue(); // 初始化队列
void AddQ(Queue Q,ElementType item); // 入队
ElementType DeleteQ(Queue Q); // 出队
int IsEmpty(Queue Q); // 判断队列是否为空
// 初始化
// 初始化
Queue CreateQueue(){
Queue Q;
Q = (Queue)malloc(sizeof(struct QNode));
@@ -25,36 +25,36 @@ Queue CreateQueue(){
return Q;
}
// 是否为空
// 是否为空
int IsEmpty(Queue Q){
return (Q->front == NULL);
}
// 入队
// 入队
void AddQ(Queue Q,ElementType item){
struct Node *node;
node = (struct Node *)malloc(sizeof(struct Node));
node->Data = item;
node->Next = NULL;
if(Q->rear==NULL){ //此时队列空
if(Q->rear==NULL){ //此时队列空
Q->rear = node;
Q->front = node;
}else{ //不为空
Q->rear->Next = node; // 将结点入队
Q->rear = node; // rear 仍然保持最后
}else{ //不为空
Q->rear->Next = node; // 将结点入队
Q->rear = node; // rear 仍然保持最后
}
}
// 出队
// 出队
ElementType DeleteQ(Queue Q){
struct Node *FrontCell;
ElementType FrontElem;
if(IsEmpty(Q)){
printf("队列空");
printf("队列空");
return 0;
}
FrontCell = Q->front;
if(Q->front == Q->rear){ // 队列中只有一个元素
if(Q->front == Q->rear){ // 队列中只有一个元素
Q->front = Q->rear = NULL;
}else{
Q->front = Q->front->Next;
@@ -67,15 +67,15 @@ ElementType DeleteQ(Queue Q){
int main(){
Queue Q;
Q = CreateQueue();
printf("入队5\n");
printf("入队5\n");
AddQ(Q,5);
printf("入队4\n");
printf("入队4\n");
AddQ(Q,4);
printf("入队4\n");
printf("入队3\n");
AddQ(Q,3);
printf("出队%d\n",DeleteQ(Q));
printf("出队%d\n",DeleteQ(Q));
printf("出队%d\n",DeleteQ(Q));
printf("出队%d\n",DeleteQ(Q));
printf("出队%d\n",DeleteQ(Q));
printf("出队%d\n",DeleteQ(Q));
printf("%d\n",DeleteQ(Q));
return 0;
}