线性表----队列(链接表示)的基本操作

来源:互联网 发布:淘宝买二手吉他靠谱吗 编辑:程序博客网 时间:2024/06/08 19:19
#include <stdio.h>#include <stdlib.h>#include <conio.h>#define MAX 100/** *@Name:线性表--队列--链接表示  *@Description:链接队列的创建,元素的入队、出队、取队头元素,队列溢出的判断等基本操作。 *@Author:Freedoman *@Date: 2014-8-10 */struct Node/*链接队列元素结点类型*/ {int data;/*结点数据域*/struct Node * next;/*结点指针域*/};typedef struct Node * PNode;struct LinkedQueue   /*链接栈类型*/{PNode head;/*队头*/ PNode tail;/*队尾*/ };typedef struct LinkedQueue * PLinkedQueue; /*函数声明*/PLinkedQueue createNullLinkedQueue(); int isNullLinkedQueue(PLinkedQueue curLinkedQueue);int enQueue(PLinkedQueue curLinkedQueue);int deQueue(PLinkedQueue curLinkedQueue);int loadQueueHeadElement(PLinkedQueue curLinkedQueue);void printLinkedQueue(PLinkedQueue curLinkedQueue);/*------------创建空队列(带头结点和尾结点)------------*/PLinkedQueue createNullLinkedQueue(){printf("创建空队列\n");PLinkedQueue curLinkedQueue = (PLinkedQueue)malloc(sizeof(PLinkedQueue));PNode p = (PNode)malloc(sizeof(Node));if(p != NULL){curLinkedQueue->head = p; curLinkedQueue->tail = curLinkedQueue->head;curLinkedQueue->head->next = NULL;printf("创建成功!\n");}else{printf("创建失败!\n");}return curLinkedQueue;} /*-------------判断当前队列是否为空------------*/int isNullLinkedQueue(PLinkedQueue curLinkedQueue){if(curLinkedQueue->head== curLinkedQueue->tail){printf("空队列!\n");return 1;}else{printf("非空队列!\n");return 0;}}/*-----------元素入队(限定在队尾操作)---------*/ int enQueue(PLinkedQueue curLinkedQueue){printf("元素入队\n");int data;printf("请输入元素>>>");scanf("%d",&data);PNode p = (PNode)malloc(sizeof(Node));if(p != NULL){p->data = data;p->next = NULL;curLinkedQueue->tail->next = p;curLinkedQueue->tail = p;printf("入队成功!\n");printLinkedQueue(curLinkedQueue);return 1;}return 0;} /*------元素出队(既定在队头操作)----------*/int deQueue(PLinkedQueue curLinkedQueue){// 出队可能产生下溢if(!isNullLinkedQueue(curLinkedQueue)){PNode temp = curLinkedQueue->head->next;curLinkedQueue->head->next = temp->next;if(temp->next == NULL){curLinkedQueue->tail = curLinkedQueue->head;}free(temp);printf("出队成功!\n");printLinkedQueue(curLinkedQueue);return 1;} else{printf("下溢!\n");}return 0;}/*---------取队头元素------------*/int loadQueueHeadElement(PLinkedQueue curLinkedQueue){if(!isNullLinkedQueue(curLinkedQueue)){int x = curLinkedQueue->head->next->data;printf("队头元素>>>>%d\n",x);return x;}return 0;}/*-------------从头到尾打印队列元素--------*/void printLinkedQueue(PLinkedQueue curLinkedQueue){PNode temp;temp = curLinkedQueue->head->next; printf("打印[");do{printf(" %d ",temp->data);temp = temp->next;}while(temp != NULL);printf("]\n");}int main(){int input; PLinkedQueue curLinkedQueue = NULL;printf("\n------链接队列的基本操作------\n");while(1){printf("\n 1_创建空队列\n 2_判断当前队列是否为空\n");printf(" 3_元素入队\n 4_元素出队\n 5_取队头元素\n 6_打印当前队列元素\n");printf("\n请选择>>>");scanf("%d",&input);switch(input){case 1 : curLinkedQueue = createNullLinkedQueue();break;case 2 : isNullLinkedQueue(curLinkedQueue);break;case 3 : enQueue(curLinkedQueue);break;case 4 : deQueue(curLinkedQueue);break;case 5 : loadQueueHeadElement(curLinkedQueue);break;case 6 : printLinkedQueue(curLinkedQueue);break;default : printf("当前输入有误!\n");}}return 0;}

0 0