#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MAXQUEUE 10
typedef struct node {
int offset;
struct Node* next;
}Node;
typedef struct queue {
Node* front;
Node* rear;
int size;
}*Queue;
void Intializequeue(Queue x_queue);
void showarray(int offset);
void PrintQueue(void (*pfun)(int),Queue x_queue);/*第一个参数为函数指针*/
void DeleteEmQueue(Queue x_queue);
bool InitializeFull();
bool Queue_ptr(Queue x_queue);
bool EnQueue(Queue x_queue,int off);
bool DeleteQueue(Queue x_queue);
bool Queueliste(int x_queue);
static Queue CopyQueueFull(int off);
int main(void) {
struct queue x_queue;
Node* v_queue;
int off;
int ch;
Intializequeue(&x_queue);
if (InitializeFull()) {
fprintf(stderr, "申请内存失败");
exit(1);
}
puts("请输入整数:");
while (scanf("%d", &off) == 1&& off != 0) {
getchar();//清掉换行符
if (Queue_ptr(&x_queue)) {/*判断队列是否已满*/
printf("队已满");
break;
}
if (EnQueue(&x_queue,off)) {
printf("添加成功\n");
}
puts("删除请按d");
if ((ch = getchar()) == 'd') {
if (DeleteQueue(&x_queue))
puts("删除成功");
}
printf("请输入下一个要添加到队里的整数:");
}
if (Queueliste(x_queue.size))
printf("队为空");
else
PrintQueue(showarray,&x_queue);
DeleteEmQueue(&x_queue);
}
void showarray(int offset) {
printf("off:%d\t", offset);
}
/*初始化*/
void Intializequeue(Queue x_queue) {
x_queue->front = x_queue->rear = NULL;
x_queue->size = 0;
}
/*判断队是否已满*/
bool Queue_ptr(Queue x_queue) {
return x_queue->size == MAXQUEUE;
}
/*查看队是否为空*/
bool Queueliste(int list) {
return list == 0;
}
/*判断内存是否申请成功(可有可无)*/
bool InitializeFull() {
Node* x_queue = (Node*)malloc(sizeof(struct node));
if (! x_queue)
return true;
else
free(x_queue);/*这里只是判断是否申请成功所以内存要释放掉*/
return false;
}
/*添加到队列*/
bool EnQueue(Queue x_queue, int off) {
Node* v_queue;
Node* b_queue = x_queue->front;
v_queue=CopyQueueFull(off);
if (v_queue == NULL)
exit(2);
if (b_queue == NULL)
x_queue->front = v_queue;
else {
x_queue->rear->next = v_queue;
}
x_queue->rear = v_queue;/*记录队尾端*/
x_queue->size++;
return true;
}
/*删除队*/
bool DeleteQueue(Queue x_queue) {
if (Queueliste(x_queue->size)) {
printf("队为空\n");
return false;
}
Node* v_queue = x_queue->front;
x_queue->size--;
x_queue->front = v_queue->next;
free(v_queue);
return true;
}
/*显示队内容*/
void PrintQueue(void (*pfun)(int), Queue x_queue) {
Node* v_queue = x_queue->front;
while (v_queue != NULL) {
(*pfun)(v_queue->offset);/*作用于(这里可以当成showarray函数)*/
v_queue = v_queue->next;
}
}
/*清空*/
void DeleteEmQueue(Queue x_queue) {
Node* v_queue = x_queue->front;
while (v_queue != NULL) {
x_queue->front = v_queue->next;
free(v_queue);
v_queue = x_queue->front;
}
}
static Queue CopyQueueFull(int off) {
Node* v_queue = (Node*)malloc(sizeof(Node));
v_queue->offset= off;
v_queue->next = NULL;
}
队列链表实现
最新推荐文章于 2024-07-10 15:47:04 发布