当前位置:   article > 正文

数据结构:链队

数据结构:链队

一、定义两个结构体

定义两个结构体,一个结构体是结点的结构体,一个结构体是保留指向对头结点和队尾结点指针的结构体

  1. #ifndef __LINK_QUEUE_H__
  2. #define __LINK_QUEUE_H__
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. typedef struct link_node{
  6. int data;
  7. struct link_node *next;
  8. }link_node,*node_p;
  9. typedef struct queue{
  10. node_p front;
  11. node_p rear;
  12. }queue,*que_p;
  13. //创建头、尾指针
  14. que_p creat_queue();
  15. //申请链队
  16. node_p creat_link(int data);
  17. //判空
  18. int empty(que_p Q);
  19. //入队
  20. void push_que(que_p Q,int data);
  21. //出队
  22. void pop_que(que_p Q);
  23. //打印
  24. void out_put(que_p Q);
  25. //销毁
  26. void free_Q(que_p *Q);
  27. #endif

二、功能

1.创建头、尾指针

  1. //创建头、尾指针
  2. que_p creat_queue(){
  3. que_p Q=(que_p)malloc(sizeof(queue));
  4. if(Q==NULL){
  5. printf("申请空间失败\n");
  6. return NULL;
  7. }
  8. Q->front=Q->rear=NULL;
  9. return Q;
  10. }

2.申请链队

  1. //申请链队
  2. node_p creat_link(int data){
  3. node_p new=(node_p)malloc(sizeof(link_node));
  4. if(new==NULL){
  5. printf("申请空间失败\n");
  6. return NULL;
  7. }
  8. new->data=data;
  9. new->next=NULL;
  10. return new;
  11. }

3.判空

  1. //判空
  2. int empty(que_p Q){
  3. if(Q==NULL){
  4. printf("申请空间失败\n");
  5. return -1;
  6. }
  7. return Q->front==NULL?1:0;
  8. }

4.入队

  1. //入队
  2. void push_que(que_p Q,int data){
  3. if(Q==NULL){
  4. printf("申请空间失败\n");
  5. return;
  6. }
  7. node_p new=creat_link(data);
  8. if(empty(Q)){ //如果是入队的第一个元素
  9. Q->front=new;
  10. Q->rear=new;
  11. return;
  12. }else{
  13. Q->rear->next=new;
  14. Q->rear=new;
  15. }
  16. }

5.出队

  1. void pop_que(que_p Q){
  2. if(Q==NULL){
  3. printf("申请空间失败\n");
  4. return;
  5. }
  6. if(empty(Q)){
  7. printf("链队为空\n");
  8. return;
  9. }
  10. node_p del=Q->front;
  11. printf("出队的值为:%d\n",Q->front->data);
  12. Q->front=Q->front->next;
  13. free(del);
  14. }

6.打印

  1. //打印
  2. void out_put(que_p Q){
  3. if(Q==NULL){
  4. printf("申请空间失败\n");
  5. return;
  6. }
  7. if(empty(Q)){
  8. printf("链队为空\n");
  9. return;
  10. }
  11. node_p p=Q->front;
  12. while(p!=NULL){
  13. printf("%d->",p->data);
  14. p=p->next;
  15. }
  16. putchar(10);
  17. }

7.销毁

  1. //销毁
  2. void free_Q(que_p *Q){
  3. if(Q==NULL || *Q==NULL){
  4. return;
  5. }
  6. node_p p=(*Q)-front; //进行降级操作,实际就是要取链队的首指针
  7. while(p!=NULL){
  8. node_p q=p->next;
  9. free(p);
  10. p=q;
  11. }
  12. free(*Q);
  13. *Q=NULL;
  14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/169059
推荐阅读
相关标签
  

闽ICP备14008679号