From aa4996a9401544bb5be2d11b094d5c95f43ec7d8 Mon Sep 17 00:00:00 2001 From: Jdhggg <24016020834@stu.nsu.edu.cn> Date: Sat, 19 Apr 2025 00:13:46 +0800 Subject: [PATCH] add linked_queue,up linked_list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加了 基于链表实现的队列 更改了 链表的打印函数的终止判断条件. Co-Authored-By: Jdhggg <111557398+Jdhggg@users.noreply.github.com> --- .gitignore | 5 +++ linked_list.c | 9 +++-- linked_queue.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++ linked_queue.h | 34 +++++++++++++++++++ main.c | 53 +++++++++++++++++------------ 5 files changed, 168 insertions(+), 24 deletions(-) create mode 100644 linked_queue.c create mode 100644 linked_queue.h diff --git a/.gitignore b/.gitignore index d7a3b46..a06dcc8 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,8 @@ dkms.conf *.recipe *.tlog *.log +*.vcxproj +*.filters +Project2.vcxproj.filters +*.filters +*.vcxproj diff --git a/linked_list.c b/linked_list.c index ef7be3f..0cde622 100644 --- a/linked_list.c +++ b/linked_list.c @@ -73,11 +73,14 @@ address_node *find_node(node* head, elem_type value) void print_node_list(node* head) { node* head_1 = head; - printf("[%d ",head_1->value); - while (head_1->next != NULL) + //printf("[%d ",head_1->value); + printf("["); + while (1) { - head_1 = head_1->next; printf("%d ", head_1->value); + head_1 = head_1->next; + if (head_1 == NULL) + break; } printf("]\n"); } diff --git a/linked_queue.c b/linked_queue.c new file mode 100644 index 0000000..10b5923 --- /dev/null +++ b/linked_queue.c @@ -0,0 +1,91 @@ +#include +#include +#include "linked_queue.h" + +link_queue* init_link_queue() +{ + link_queue* q = (link_queue*)malloc(sizeof(link_queue)); + if (q == NULL) + { + printf("error: malloc from init_link_queue failed\n"); + return; + } + q->front = NULL; + q->rear = NULL; + q->size = 0; + return q; +} + +// +void push_link_queue(link_queue* q, elem_type value) +{ + node* new_node = (node*)malloc(sizeof(node)); + if (new_node == NULL) + { + printf("error: malloc from push_link_queue failed\n"); + return; + } + new_node->value = value; + new_node->next = NULL; + if (q->front == NULL) + { + q->front = new_node; + q->rear = new_node; + } + else + { + q->rear->next = new_node; + q->rear = new_node; + } + q->size++; +} + +// +elem_type pop_link_queue(link_queue* q) +{ + if (empty_link_queue(q)) + { + printf("error: pop from empty link_queue\n"); + return; + } + link_queue* tmp = q->front; + elem_type a = q->front->value; + q->front = q->front->next; + q->size--; + return a; +} + + +// п +int empty_link_queue(link_queue* q) +{ + if (q->size == 0) + { + return 1; + } + else + { + return 0; + } +} + + +// ӡ +int print_link_queue(link_queue* q) +{ + if (empty_link_queue(q)) + { + printf("error: queue empty form: print_link_queue\n"); + return; + } + node* head = q->front; + printf("["); + while (1) + { + printf(" %d ", head->value); + head = head->next; + if (head == NULL) + break; + } + printf("]\n"); +} \ No newline at end of file diff --git a/linked_queue.h b/linked_queue.h new file mode 100644 index 0000000..b80aa41 --- /dev/null +++ b/linked_queue.h @@ -0,0 +1,34 @@ +#ifndef LINKED_QUEUE_H +#define LINKED_QUEUE_H +#define elem_type int + +typedef struct node +{ + elem_type value; + struct node* next; +} node; + +typedef struct linked_queue +{ + struct node* front; + struct node* rear; + int size; +}link_queue; + +// ʼ +link_queue* init_link_queue(); + +// +void push_link_queue(link_queue* q, elem_type value); + +// +elem_type pop_link_queue(link_queue* q); + +// п +int empty_link_queue(link_queue* q); + +// ӡ +int print_link_queue(link_queue* q); + + +#endif \ No newline at end of file diff --git a/main.c b/main.c index e7359a5..f7647ee 100644 --- a/main.c +++ b/main.c @@ -60,34 +60,34 @@ int main(void) push_array_queue(q, 666); print_array_queue(q);*/ -// node* q1 = init_node(1); -// node* q2 = init_node(2); -// node* q3 = init_node(3); -// node* q4 = init_node(4); -// q1->next = q2; -// q2->next = q3; -// q3->next = q4; -// //address_node *n = find_node(q1, 3); -// // printf("%d\n %p\n", n->n,n->p -// //int e = get_node_list(q1); -// node* q2_3 = init_node(0); -// insert_node(q2, q2_3); -// print_node_list(q1); -// delete_node(q2); -// print_node_list(q1); + //node* q1 = init_node(1); + //node* q2 = init_node(2); + //node* q3 = init_node(3); + //node* q4 = init_node(4); + //q1->next = q2; + //q2->next = q3; + //q3->next = q4; + ////address_node *n = find_node(q1, 3); + //// printf("%d\n %p\n", n->n,n->p + ////int e = get_node_list(q1); + //node* q2_3 = init_node(0); + //insert_node(q2, q2_3); + //print_node_list(q1); + //delete_node(q2); + //print_node_list(q1); -/* -stack_linked* head = init_stack_linked(); + + /* stack_linked* head = init_stack_linked(); push_stack_linked(head, 1); push_stack_linked(head, 2); push_stack_linked(head, 3); print_linked(head); pop_stack_linked(head); - print_linked(head); -*/ + print_linked(head);*/ + // queue_test(); - array_queue *q = init_array_queue(); + /*array_queue *q = init_array_queue(); push_array_queue(q, 1); push_array_queue(q, 2); push_array_queue(q, 3); @@ -97,7 +97,18 @@ stack_linked* head = init_stack_linked(); print_array_queue(q); printf("----------\n"); push_array_queue(q, 666); - print_array_queue(q); + print_array_queue(q);*/ + /* link_queue* q = init_link_queue(); + push_link_queue(q, 1); + push_link_queue(q, 2); + push_link_queue(q, 3); + print_link_queue(q); + printf("____________________\n"); + pop_link_queue(q); + print_link_queue(q);*/ + + + printf("Hello World!\n"); system("pause"); return 0;