資料結構,資料結構與演算法

來源:互聯網
上載者:User

資料結構,資料結構與演算法
隊列的鏈式實現

1 隊列的鏈式儲存表示
隊列的鏈式儲存結構簡稱為鏈隊列,它是限制在表頭進行刪除操作和表尾進行插入操作的單鏈表。
需要兩類不同的結點:資料元素結點,隊列的隊首指標和隊尾指標的結點
指標結點類型定義:

typedef struct link_queue{   QNode  *front ,  *rear ;}LinkQueue ;

2 鏈隊運算及指標變化
鏈隊的操作實際上是單鏈表的操作,只不過是刪除在表頭進行,插入在表尾進行。插入、刪除時分別修改不同的指標

3    鏈隊列的基本操作⑴ 鏈隊列的初始化Status Init_LinkQueue(LinkQueue  *Q ){   /*成功返回OK,否則返回ERROR*/   QNode  *p ;p=(QNode *)malloc(sizeof(QNode)) ; /* 開闢頭結點 */if(p==NULL) return ERROR;p->next=NULL ;Q->front=Q->rear=p ; return OK;}
⑵ 鏈隊列的入隊操作       在已知隊列的隊尾插入一個元素e ,即修改隊尾指標(Q.rear)。Status  Insert_LinkQueue(LinkQueue  *Q , ElemType  e)      /*  將資料元素e插入到鏈隊列Q的隊尾  */{  QNode  *p ;   p=(QNode *)malloc(sizeof(QNode)) ;if (!p)  return  ERROR;/*  申請新結點失敗,返回錯誤標誌 */p->data=e ; p->next=NULL ;       /*  形成新結點 */Q->rear->next=p ;  Q->rear=p ;  /* 新結點插入到隊尾  */return OK;}
鏈隊列的出隊操作Status  Delete_LinkQueue(LinkQueue  *Q, ElemType *x)   {   QNode *p ;if  (Q->front==Q->rear)  return ERROR ;   /* 隊空  */p=Q->front->next ;   /*  取隊首結點  */*x=p->data ; Q->front->next=p->next ;      /*  修改隊首指標  */if  (p==Q->rear)  Q->rear=Q->front ;     /*  當隊列只有一個結點時應防止丟失隊尾指標  */    free(p) ;   return OK ; }
⑷ 鏈隊列的撤消void  Destroy_LinkQueue(LinkQueue  *Q )   /*  將鏈隊列Q的隊首元素出隊  */{   while  (Q->front!=NULL){Q-> rear= Q-> front->next;         /*  令尾指標指向隊列的第一個結點   */free(Q-> front);      /*  每次釋放一個結點  */     /*  第一次是頭結點,以後是元素結點  */Q-> front= Q-> rear;}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.