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输出结果#include 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("\n 1 - Enqueue"); printf("\n 2 - Dequeue"); printf("\n 3 - Display"); printf("\n 4 - Exit"); printf("\n 5-front"); create(); while (1){ printf("\n Enter choice : "); scanf("%d", &ch); switch (ch){ case 1: printf("输入数据: "); 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("\n 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("\n Error"); return; } else if (front1->ptr != NULL){ front1 = front1->ptr; printf("\n Dequeued value : %d", front->info); free(front); front = front1; }else{ printf("\n 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