程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 隊列基本操作

隊列基本操作

編輯:C++入門知識

隊列是先進先出的數據結構,出隊的一端叫隊首,入隊的一端叫隊尾,就像是日常生活中排隊買火車票一樣,下面是隊列的基本操作

創建史帶頭節點的鏈表


[cpp]  #include <stdio.h>  
#include <stdlib.h>  
 
#define OK 1  
#define ERROR -1  
#define OVERFLOW 0  
 
typedef int elemtype; 
typedef int status; 
typedef struct QNode 

   elemtype data; 
   struct QNode *next; 
}QNode,*queuePtr;  //定義鏈表節點中數據  
typedef struct 

    queuePtr front; //指向鏈表的頭  
    queuePtr rear; //指向鏈表的尾  指向不是沒有分配單元的節點  
}LinkQueue; 
 
//對隊列進行初始化  
status initQueue(LinkQueue &q) 

   q.front=q.rear=(queuePtr)malloc(sizeof(QNode));  //創建頭節點  頭指針指向頭節點  
   if(!q.front)  //創建失敗  
   { 
       exit(OVERFLOW); 
   } 
   q.front->next=NULL; 
   return OK; 

 
//銷毀隊列  
status  destoryQueue(LinkQueue &q) 

    while(q.front) 
    { 
        q.rear=q.front->next;  //將頭節點的next賦給尾指針  
        free(q.front);      //刪除頭節點  
        q.front=q.rear;    //重新生成為節點  
    }   
    printf("隊列銷毀成功!\n"); 
    q.front=NULL; 
    return OK;  //刪除完成返回OK  

 
//進行元素插入  
status enQueue(LinkQueue &q,elemtype e) 

    queuePtr p=(queuePtr)malloc(sizeof(QNode)); //為新元素分配空間  
    if(!p) exit(OVERFLOW);  
    p->data=e; 
    p->next=NULL; 
    q.rear->next=p; //為尾指針的next重新賦值  將元素插入表尾  
    q.rear=p;  //重新定位尾指針  
    return OK; 

 
//刪除元素  
status deQueue(LinkQueue &q) 

    if(q.front==q.rear) return ERROR; //此時隊列為空  
    queuePtr p=q.front->next;   
//  e=p->data;  //刪除是dui首  
    q.front->next=p->next; 
    if(q.rear==p) 
        q.rear=q.front; 
    free(p); 
    printf("元素刪除成功!\n"); 
    return OK; 

 
//獲得隊首元素  
status getHead(LinkQueue &q) 

    queuePtr p=q.front->next; 
    printf("%d\n",p->data); 
    return OK; 

 
//輸出隊列  
status printQueue(LinkQueue q) 

    queuePtr p; 
    p=q.front->next; 
    while(p) 
    { 
      printf("%d ",p->data); 
      p=p->next; 
    } 
     
    return OK; 

 
int main() 

    LinkQueue q; 
    int i,j,k,m; 
    initQueue(q);//進行隊列的初始化:  
    printf("插入幾個數據:\n"); 
    scanf("%d",&i); 
    for(j=0;j<i;j++) 
    {   printf("請輸入第%d個整數",j+1); 
        scanf("%d",&k); 
        enQueue(q,k); 
    } 
    do 
    { 
        printf("請根據提示進行相應操作:\n"); 
        printf("刪除元素選擇輸入1:\n"); 
        printf("清空隊列選擇輸入2:\n"); 
        printf("輸出隊列選擇輸入3:\n"); 
        printf("退出輸入4:\n"); 
        scanf("%d",&m); 
        switch(m) 
        { 
            case 1: deQueue(q);  break; 
            case 2: destoryQueue(q); break; 
            case 3: printQueue(q);break; 
            default: printf("請重新輸入:\n");break; 
        } 
    }while(m!=4); 
   return 0; 

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR -1
#define OVERFLOW 0

typedef int elemtype;
typedef int status;
typedef struct QNode
{
   elemtype data;
   struct QNode *next;
}QNode,*queuePtr;  //定義鏈表節點中數據
typedef struct
{
 queuePtr front; //指向鏈表的頭
 queuePtr rear; //指向鏈表的尾  指向不是沒有分配單元的節點
}LinkQueue;

//對隊列進行初始化
status initQueue(LinkQueue &q)
{
   q.front=q.rear=(queuePtr)malloc(sizeof(QNode));  //創建頭節點  頭指針指向頭節點
   if(!q.front)  //創建失敗
   {
    exit(OVERFLOW);
   }
   q.front->next=NULL;
   return OK;
}

//銷毀隊列
status  destoryQueue(LinkQueue &q)
{
 while(q.front)
 {
  q.rear=q.front->next;  //將頭節點的next賦給尾指針
  free(q.front);      //刪除頭節點
  q.front=q.rear;    //重新生成為節點
 } 
 printf("隊列銷毀成功!\n");
 q.front=NULL;
 return OK;  //刪除完成返回OK
}

//進行元素插入
status enQueue(LinkQueue &q,elemtype e)
{
 queuePtr p=(queuePtr)malloc(sizeof(QNode)); //為新元素分配空間
 if(!p) exit(OVERFLOW);
 p->data=e;
 p->next=NULL;
 q.rear->next=p; //為尾指針的next重新賦值  將元素插入表尾
 q.rear=p;  //重新定位尾指針
 return OK;
}

//刪除元素
status deQueue(LinkQueue &q)
{
 if(q.front==q.rear) return ERROR; //此時隊列為空
 queuePtr p=q.front->next; 
// e=p->data;  //刪除是dui首
 q.front->next=p->next;
 if(q.rear==p)
  q.rear=q.front;
 free(p);
 printf("元素刪除成功!\n");
    return OK;
}

//獲得隊首元素
status getHead(LinkQueue &q)
{
 queuePtr p=q.front->next;
 printf("%d\n",p->data);
 return OK;
}

//輸出隊列
status printQueue(LinkQueue q)
{
 queuePtr p;
 p=q.front->next;
 while(p)
 {
   printf("%d ",p->data);
   p=p->next;
 }
 
 return OK;
}

int main()
{
 LinkQueue q;
 int i,j,k,m;
 initQueue(q);//進行隊列的初始化:
 printf("插入幾個數據:\n");
 scanf("%d",&i);
 for(j=0;j<i;j++)
 {   printf("請輸入第%d個整數",j+1);
  scanf("%d",&k);
        enQueue(q,k);
 }
 do
 {
  printf("請根據提示進行相應操作:\n");
        printf("刪除元素選擇輸入1:\n");
  printf("清空隊列選擇輸入2:\n");
  printf("輸出隊列選擇輸入3:\n");
  printf("退出輸入4:\n");
  scanf("%d",&m);
  switch(m)
  {
   case 1: deQueue(q);  break;
   case 2: destoryQueue(q); break;
   case 3: printQueue(q);break;
   default: printf("請重新輸入:\n");break;
  }
 }while(m!=4);
   return 0;
}

 \
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved