使用 C 語言的連結串列解釋佇列


使用連結串列可以避免佇列溢位和佇列下溢。

以下是在 C 程式語言中利用連結串列進行佇列操作的步驟 −

  • 插入
  • 刪除

插入

語法如下 −

語法

&item :
Newnode = (node*) mallac (sizeof (node));
newnode ->data = item;
newnode ->link = NULL;
if ((front = = NULL) || (rear = = NULL)){
   front= newnode;
   rear = newnode;
}else{
   Rear->link = newnode;
   rear = newnode;
}

刪除

語法如下 −

語法

if ((front= = NULL))
printf("Deletion is not possible, Queue is empty");
else{
   temp = front;
   front = front ->link;
   free (temp);
}

顯示

語法如下 −

語法

while (front! = NULL){
   printf("%d", front ->data);
   front = front->link;
}

程式

以下是使用連結串列進行佇列的 C 程式 −

#include <stdio.h>
#include <stdlib.h>
struct node{
   int info;
   struct node *ptr;
}*front,*rear,*temp,*front1;
int frontelement();
void enq(int data);
void deq();
void display();
void create();
int count = 0;
void main(){
   int no, ch, e;
   printf("
1 - Enqueue");    printf("
2 - Dequeue");    printf("
3 - Display");    printf("
4 - Exit");    printf("
5-front");    create();    while (1){       printf("
Enter choice : ");       scanf("%d", &ch);       switch (ch){          case 1:             printf("Enter data : ");          scanf("%d", &no);          enq(no);          break;          case 2:             deq();          break;          case 3:             display();          break;          case 4:             exit(0);          break;          case 5:             e = frontelement();          if (e != 0)             printf("Front element : %d", e);          else             printf("
No front element in Queue");          break;          default:          printf("Wrong choice, Try again ");          break;       }    } } void enq(int data){    if (rear == NULL){       rear = (struct node *)malloc(1*sizeof(struct node));       rear->ptr = NULL;       rear->info = data;       front = rear;    }else{       temp=(struct node *)malloc(1*sizeof(struct node));       rear->ptr = temp;       temp->info = data;       temp->ptr = NULL;       rear = temp;    }    count++; } void display(){    front1 = front;    if ((front1 == NULL) && (rear == NULL)){       printf("Queue is empty");       return;    }    while (front1 != rear){       printf("%d ", front1->info);       front1 = front1->ptr;    }    if (front1 == rear)       printf("%d", front1->info);    }    void deq(){       front1 = front;       if (front1 == NULL){          printf("
Error");          return;       }       else       if (front1->ptr != NULL){          front1 = front1->ptr;          printf("
Dequeued value : %d", front->info);          free(front);          front = front1;       }else{          printf("
Dequeued value : %d", front->info);          free(front);          front = NULL;       rear = NULL;    }    count--; } int frontelement(){    if ((front != NULL) && (rear != NULL))       return(front->info);    else       return 0; }

輸出

執行以上程式,將生成以下結果 −

1 - Enque
2 - Deque
3 – Display
4 - Exit
5 - Front element
Enter choice: 1
Enter data: 14
Enter choice: 1
Enter data: 85
Enter choice: 1
Enter data: 38
Enter choice: 5
Front element: 14
Enter choice: 3
14 85 38
Enter choice: 2
Dequed value: 14
Enter choice: 3
Enter choice: 4

更新於: 26-3-2021

1K+ 檢視

開啟你的 職業

完成課程獲得認證

開始
廣告
© . All rights reserved.