数据结构复习第二章:队列

    技术2024-07-09  81

    链表实现队列

    #include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node *next; }node; node *head = NULL; node *mk_node(int data) { node *p = (node*)malloc(sizeof(node)); if(p == NULL) { printf("malloc fair"); exit(1); } p->data = data; return p; } int head_insert(node *p)//头插法 { p->next = head; head = p; } int traverse() { node *pre = head; while(pre != NULL)//指针指向的当前节点不为空 { printf("%d ",pre->data); pre = pre->next; } printf("\n-----------------\n"); } node *find_item(int data) { node *pre = head; while(pre != NULL)//指针指向的当前节点不为空 { if(pre->data == data) { return pre; } pre = pre->next; } return NULL; } int delete_node(node *p) { if(head == p) { head = head->next; return 1; } node *pre = head; while(pre->next != NULL)//删除时要看下一个节点节点是否存在 删除的方法所决定 { if(pre->next = p) { pre->next = p->next;//删除节点 free_node(p); return ; } pre = pre->next; } return NULL; } int destroy() { node *pre = head; node *p = NULL; while(pre != NULL) { p = pre->next; free_node(pre); pre = p; } return ; } int free_node(node *p) { free(p); } int is_empty() { if(head == NULL) { return 1; }else { return 0; } } int enqueue(int data)//入队 { node *p = mk_node(data); if(head == NULL)//队列为空 直接放 { p->next = head; head = p; return ; } node *tail = head;//设置一个尾节点 while(tail->next != NULL)//末尾没有节点了 { tail = tail->next; //找到最后一个为空的结点 } p->next = tail->next;//插在尾指针之前 tail->next = p; } int dequeue()//出队 打印出当前指针所指向的数据 释放节点 { node *pre = head; head = head->next; int data = pre->data; free_node(pre); return data ; } int main() { enqueue(1); enqueue(2); enqueue(3); enqueue(4); traverse(); while(!is_empty()) { printf("dequeue(): %d \n",dequeue()); } printf("\n"); return 0; }
    Processed: 0.035, SQL: 9