1. 程式人生 > >鏈隊列基本操作

鏈隊列基本操作

get getc 結點 eno getchar main 輸出 元素 cas

#include<stdio.h>
#include<Stdlib.h>
typedef int  elemtype;
typedef struct QueueNode
{
    elemtype data;
    struct QueueNode *next;
}LinkedQueueNode;
typedef struct LQueue
{
    LinkedQueueNode *front;
    LinkedQueueNode *rear;
}LQueue, * LinkedQueue;

LinkedQueue Init_LinkedQueue();
int LinkedQueue_Empty(LinkedQueue Q); int Enter_LinkedQueue(LinkedQueue Q,elemtype x); int Delete_LinkedQueue(LinkedQueue Q,elemtype *x); int GetFront_LinkedQueue(LinkedQueue Q,elemtype *x); int Print_LinkedQueue(LinkedQueue Q); void menu() { system("cls"); printf("\t\t1-創建\n"); printf("\t\t2-入隊\n
");; printf("\t\t3-判斷隊列是否為空\n"); printf("\t\t4-出隊\n"); printf("\t\t5-查看隊頭元素\n"); printf("\t\t6-輸出\n"); printf("\t\t#-quit\n"); printf("Please select: "); } int main() { char cmd; int isdo; LinkedQueue Q; elemtype x; system("cls"); menu(); while((cmd=getchar())!=
#) { switch(cmd) { case 1: Q=Init_LinkedQueue(); if(Q==NULL) { printf("申請鏈隊列內存空間失敗,程序結束"); return 0; } printf("\n創建成功!\n"); printf("\n\n\n\t\t\t"); break; case 2: printf("輸入隊列元素:\n"); scanf("%d",&x); while(x!=0) { isdo= Enter_LinkedQueue(Q,x); scanf("%d",&x); } if(isdo==1) { printf("入隊成功"); } else { printf("入隊失敗"); } printf("\n"); printf("\n\n\n\t\t\t"); break; case 3: isdo=LinkedQueue_Empty(Q); if(isdo==1) { printf("隊列為空\n"); } else if(isdo==0) { printf("隊列不為空\n"); } printf("\n"); printf("\n\n\n\t\t\t"); break; case 4: isdo=Delete_LinkedQueue(Q,&x); if(isdo==1) { printf("出隊成功,出隊的元素為:%d\n",x); } else if(isdo==0) { printf("出隊失敗\n"); } printf("\n"); printf("\n\n\n\t\t\t"); break; case 5: isdo=GetFront_LinkedQueue(Q,&x); if(isdo==1) { printf("隊頭元素為:%d\n",x); } else if(isdo==0) { printf("取隊頭元素失敗\n"); } printf("\n"); printf("\n\n\n\t\t\t"); break; case 6: isdo=Print_LinkedQueue(Q); printf("\n"); printf("\n\n\n\t\t\t"); break; } fflush(stdin); system("pause"); menu(); } return 0; } //初始化 LinkedQueue Init_LinkedQueue() { LinkedQueue Q=(LinkedQueue)malloc(sizeof(LQueue)); LinkedQueueNode *head=(LinkedQueueNode *)malloc(sizeof(LinkedQueueNode)); if(head!=NULL&&Q!=NULL) { head->next=NULL; Q->front=head; Q->rear=head; } return Q; } //判隊列空 int LinkedQueue_Empty(LinkedQueue Q) { if(Q->front==Q->rear) { return 1; } else { return 0; } } //入隊 int Enter_LinkedQueue(LinkedQueue Q,elemtype x) { LinkedQueueNode *node; node=(LinkedQueueNode *)malloc(sizeof(LinkedQueueNode)); if(node==NULL) { return 0; } node->data=x; node->next=NULL; Q->rear->next=node; //將新結點插入隊尾 Q->rear=node; //設置尾指針指向新的隊尾元素 return 1; } //出隊 int Delete_LinkedQueue(LinkedQueue Q,elemtype *x) { LinkedQueueNode *node; if(Q->front==Q->rear) { return 0; } else { node=Q->front->next; *x=node->data; Q->front->next=node->next; if(node==Q->rear) { Q->rear=Q->front; } free(node); return 1; } } //取隊列頭數據元素 int GetFront_LinkedQueue(LinkedQueue Q,elemtype *x) { if(Q->front==Q->rear) { return 0; } else { *x=Q->front->next->data; return 1; } } //輸出 int Print_LinkedQueue(LinkedQueue Q) { LinkedQueueNode *p; if(Q->front==Q->rear) { return 0; } p=Q->front->next; while(p->next!=0) { printf("%4d\n",p->data); p=p->next; } return 1; }

鏈隊列基本操作