栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

链队列的学习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链队列的学习

队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 

队列就像生活中排队一样,从队头出,队尾进,不允许插队。

 代码
#include 
#include 

typedef struct LinkNode{
    int data;
    struct LinkNode* next;
}*LNPtr;//创建链队列节点


typedef struct LQueue{
    LNPtr front;
    LNPtr rear;
}LQueue,*LQueuePtr;//创建链队列


LQueuePtr initQueue(){
    LQueuePtr resultPtr = (LQueuePtr)malloc(sizeof( LQueue));
    LNPtr headPtr = (LNPtr)malloc(sizeof( LNPtr));
    headPtr->next = NULL;
    resultPtr->front = headPtr;
    resultPtr->rear = headPtr;
    return resultPtr;
}//创建一个空的队列


void outputLQueue(LQueuePtr paraQueuePtr){
     LNPtr tempPtr = paraQueuePtr->front->next;
     while(tempPtr != NULL){//不为空才能打印
         if(tempPtr->data <= 0){
             printf("r输入错误,请重新输入");//我规定输入小于0则无法储存
             return;
         }
         printf("%d ", tempPtr->data);
         tempPtr = tempPtr->next;
     }
     printf("rn");
 } //打印函数
 
 void enqu(LQueuePtr paraQueuePtr, int paraElement){
     LNPtr tempnodePtr = (LNPtr)malloc(sizeof(LNPtr));
     tempnodePtr->data = paraElement;
     tempnodePtr->next = NULL;
     

    
     paraQueuePtr->rear->next = tempnodePtr;
     
     paraQueuePtr->rear = tempnodePtr;
 }//入队
 
 
 int dequ(LQueuePtr paraQueuePtr){
     int resultValue;
     LNPtr tempnodePtr;
     
     if(paraQueuePtr->front == paraQueuePtr->rear){
         printf("队列为空rn");
         return -1;
     }//队列为空
    
    tempnodePtr = paraQueuePtr->front->next;
    resultValue = tempnodePtr->data;
    paraQueuePtr->front->next = paraQueuePtr->front->next->next;
    
    if(paraQueuePtr->rear == tempnodePtr){
        paraQueuePtr->rear = paraQueuePtr->front;
    }
      
      tempnodePtr = NULL;
      return resultValue;
 }//出队
 
 void testLinkQueue(){
    LQueuePtr tempQueuePtr;
    tempQueuePtr = initQueue();
    enqu(tempQueuePtr, 10);
    enqu(tempQueuePtr, 30);
    enqu(tempQueuePtr, 50);

    outputLQueue(tempQueuePtr);

    printf("dequeue gets %drn", dequ(tempQueuePtr));
    printf("dequeue gets %drn", dequ(tempQueuePtr));
    printf("dequeue gets %drn", dequ(tempQueuePtr));
    printf("dequeue gets %drn", dequ(tempQueuePtr));

    enqu(tempQueuePtr, 8);
    enqu(tempQueuePtr, 9);
    enqu(tempQueuePtr, 10);
    enqu(tempQueuePtr, 500);
    enqu(tempQueuePtr, 600);
    enqu(tempQueuePtr, 700);
    enqu(tempQueuePtr, -100);
    outputLQueue(tempQueuePtr);
}//测试
 
 int main(){
     testLinkQueue();
     return 0;
 }


 
 

入队和出队
void enqu(LQueuePtr paraQueuePtr, int paraElement){
     LNPtr tempnodePtr = (LNPtr)malloc(sizeof(LNPtr));
     tempnodePtr->data = paraElement;
     tempnodePtr->next = NULL;
     
     paraQueuePtr->rear->next = tempnodePtr;
     
     paraQueuePtr->rear = tempnodePtr;
 }//入队
 
 
 int dequ(LQueuePtr paraQueuePtr){
     int resultValue;
     LNPtr tempnodePtr;
     
     if(paraQueuePtr->front == paraQueuePtr->rear){
         printf("队列为空rn");
         return -1;
     }//队列为空
    
    tempnodePtr = paraQueuePtr->front->next;
    resultValue = tempnodePtr->data;
    paraQueuePtr->front->next = paraQueuePtr->front->next->next;
    
    if(paraQueuePtr->rear == tempnodePtr){
        paraQueuePtr->rear = paraQueuePtr->front;
    }
      
      tempnodePtr = NULL;
      return resultValue;
 }//出队
测试代码
void testLinkQueue(){
    LQueuePtr tempQueuePtr;
    tempQueuePtr = initQueue();
    enqu(tempQueuePtr, 10);
    enqu(tempQueuePtr, 30);
    enqu(tempQueuePtr, 50);

    outputLQueue(tempQueuePtr);

    printf("dequeue gets %drn", dequ(tempQueuePtr));
    printf("dequeue gets %drn", dequ(tempQueuePtr));
    printf("dequeue gets %drn", dequ(tempQueuePtr));
    printf("dequeue gets %drn", dequ(tempQueuePtr));

    enqu(tempQueuePtr, 8);
    enqu(tempQueuePtr, 9);
    enqu(tempQueuePtr, 10);
    enqu(tempQueuePtr, 500);
    enqu(tempQueuePtr, 600);
    enqu(tempQueuePtr, 700);
    enqu(tempQueuePtr, -100);
    outputLQueue(tempQueuePtr);
}//测试

 

测试结果


 
 
 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号