作业/数据结构/2023/7/10

1.实现单向链表队列的,创建,入队,出队,遍历,长度,销毁。

main.c

#include "head.h"

int main(int argc, const char *argv[])
{
    //创建链式队列
    queue_ptr QL=create_queue();
    //入栈
    push(QL, 1000);
    push(QL, 1001);
    push(QL, 1002);
    push(QL, 1003);
    push(QL, 1004);
    //遍历 
    output(QL);
    //出队
    pop( QL);
    output(QL);
    //长度
    length(QL);
    //销毁 
    freedom(QL);
    return 0;
}                                     

head.h

#ifndef __HEAD_H__                
#define __HEAD_H__                
                                  
#include <stdio.h>                
#include <stdlib.h>               
//定义节点中的数据类型            
typedef int datatype;             
//定义节点结构体                  
typedef struct node               
{                                 
    union                         
    {                             
        int len;                  
        datatype data;            
    };                            
    struct node*next;             
}Node;                            
                                  
//定义链式队列结构体              
typedef struct seq                
{                                 
    Node *head;                   
    Node *tail;                   
}queue,*queue_ptr;                
                                  
                                  
                                  
                                  
//1.创建链式队列                  
queue_ptr create_queue();         
//2.判断为空操作                  
int empty(queue_ptr QL);          
//3.链式队列入队                  
int push(queue_ptr QL,datatype e);
//4.链式队列的遍历                
void output(queue_ptr QL);        
//5,链式队列的出队只能从对头删除  
void pop(queue_ptr QL);           
//6.长度                          
void length(queue_ptr QL);        
//销毁                            
void freedom(queue_ptr QL);       
#endif                            

 fun.c

 #include "head.h"                                     
                                                       
 //1.创建链式队列                                      
 queue_ptr create_queue()                              
 {                                                     
     //申请链式队列的结构体的大小空间                  
     queue_ptr QL=(queue_ptr)malloc(sizeof(queue));    
     //判断链式队列申请节点成功没有                    
     if(NULL==QL)                                      
     {                                                 
         printf("创建链式队列失败\n");                 
         return NULL;                                  
     }                                                 
                                                       
     //申请节点结构体的大小空间                        
     QL->head=(Node*)malloc(sizeof(Node));             
     //判断链式队列节点申请有没有成功                  
     if(NULL==QL->head)                                
     {                                                 
         printf("节点创建失败\n");                     
         free(QL);                                     
         return NULL;                                  
     }                                                 
                                                       
     //头节点创建成功                                  
     QL->head->len=0;//节点长度置0                     
     QL->head->next=NULL;//节点指针域指向NULL          
                                                       
     //链式队列结构体里面的指针指向                    
     QL->tail=QL->head;                                
                                                       
     printf("链式队列创建成功\n");                     
     return QL;                                        
 }                                                     
                                                       
                                                       
 //2.判断为空操作                                      
 int empty(queue_ptr QL)                               
 {                                                     
     if(QL==NULL)                                      
     {                                                 
         printf("判空操作失败\n");                     
         return -1;                                    
     }                                                 
     //当链式队列结构体的指针指向同一个节点            
         return QL->head==QL->tail;                    
 }                                                     
                                                       
                                                       
 //3.链式队列入队                                      
 int push(queue_ptr QL,datatype e)                     
 {                                                     
     if(QL==NULL)                                      
     {                                                 
         printf("入队失败\n");                         
         return 0;                                     
     }                                                 
                                                       
                                                       
                                                       
     //申请普通节点                                    
     Node *p=(Node*)malloc(sizeof(Node));              
     if(NULL==p)                                       
     {                                                 
         printf("申请节点失败\n");                     
         return 0;                                     
     }                                                 
     p->data=e;                                        
     p->next=NULL;                                     
                                                       
                                                       
                                                       
     //然后尾插                                        
     QL->tail->next=p;                                 
     QL->tail=p;                                       
     //长度自增                                        
     QL->head->len++;                                  
                                                       
     return 1;                                         
 }                                                     
                                                       
                                                       
 //4.链式队列的遍历                                    
 void output(queue_ptr QL)                             
 {                                                     
     if(NULL==QL ||empty(QL))                          
     {                                                 
         printf("遍历失败\n");                         
         return ;                                      
     }                                                 
     //循环遍历的指向的指针                            
     Node* q=QL->head;                                 
     while(q->next!=NULL)                              
     {                                                 
         q=q->next;                                    
         printf("%d  ",q->data);                       
     }                                                 
     printf("\n");                                     
 }                                                     
                                                       
                                                       
 //5,链式队列的出队只能从对头删除                      
 void pop(queue_ptr QL)                                
 {                                                     
     if(NULL==QL ||empty(QL))                          
     {                                                 
         printf("出队失败\n");                         
         return ;                                      
     }                                                 
                                                       
     //定义一个遍历指向队头指针                        
     Node*p=QL->head->next;                            
     //头指针指向下一节点                              
     QL->head->next=p->next;                           
     free(p);                                          
     p=NULL;                                           
     QL->head->len--;                                  
 }                                                     
                                                       
                                                       
 //6.长度                                              
 void length(queue_ptr QL)                             
 {                                                     
     if(NULL==QL)                                      
     {                                                 
         printf("输出长度失败\n");                     
         return ;                                      
     }                                                 
     int len=QL->head->len;                            
     printf("该顺序链式队列的长度为:%d\n",len);        
     return;                                           
 }                                                     
                                                       
 //销毁                                                
 void freedom(queue_ptr QL)                            
 {                                                     
     if(NULL==QL)                                      
     {                                                 
         printf("销毁失败\n");                         
         return ;                                      
     }                                                 
     while(QL->head->next!=NULL)                       
     {                                                 
         pop(QL);                                      
     }                                                 
     free(QL->head);                                   
     QL->head=NULL;                                    
     printf("销毁成功\n");                             
     return;                                           
}

 

相关推荐

  1. [数据结构]串、数组 C++编程作业

    2024-07-11 05:20:07       43 阅读
  2. [数据结构] 栈和队列C++作业

    2024-07-11 05:20:07       39 阅读
  3. [数据结构]C++递归算法作业

    2024-07-11 05:20:07       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 05:20:07       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 05:20:07       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 05:20:07       57 阅读
  4. Python语言-面向对象

    2024-07-11 05:20:07       68 阅读

热门阅读

  1. C++函数模板学习

    2024-07-11 05:20:07       18 阅读
  2. 探索Perl的自动清洁工:垃圾收集机制全解析

    2024-07-11 05:20:07       20 阅读
  3. Kruskal

    2024-07-11 05:20:07       22 阅读
  4. C++入门

    C++入门

    2024-07-11 05:20:07      20 阅读
  5. Spring框架配置进阶_自动装配(XML和注解)

    2024-07-11 05:20:07       20 阅读
  6. xml CDATA

    2024-07-11 05:20:07       22 阅读
  7. XML Schema 杂项数据类型

    2024-07-11 05:20:07       22 阅读
  8. 我的前端实习之旅

    2024-07-11 05:20:07       22 阅读
  9. 算法——二分法

    2024-07-11 05:20:07       25 阅读
  10. Python 简介

    2024-07-11 05:20:07       24 阅读
  11. 内核调试方法

    2024-07-11 05:20:07       21 阅读