单链表队列

来源:互联网 发布:linux rpm的使用 编辑:程序博客网 时间:2024/05/01 10:59
#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define STACK_SIZE 100#define STACK_INCREASE 10#define OK -100#define ERROR -1//--------------------------------------------------------------------------typedef int QElemType; //定义取决与对象是什么typedef int Status;typedef struct QNode{    QElemType data;    struct QNode * next;}QNode, * QueuePtr;typedef struct{    QueuePtr front; //队头指针    QueuePtr rear; //队尾指针}LinkQueue;//--------------------------------------------------------------------------Status InitQueue( LinkQueue &Q );//初始化队列Status DestroyQueue( LinkQueue &Q );//销毁队列Status EnQueue( LinkQueue &Q, QElemType e );//插入元素到队尾Status ClearQueue( LinkQueue &Q );//清空队列Status QueueEmpty( LinkQueue Q );//判断是否为空int QueueLength( LinkQueue Q );//求队列元素个数Status GetHead( LinkQueue Q, QElemType &e );//取得对头元素Status DeQueue( LinkQueue Q, QElemType &e );//删除对头元素void status_( int sat );//--------------------------------------------------------------------------int main(){    int choice, status, e;    LinkQueue Q;    puts( "No1 InitQueue" );    puts( "No2 DestroyQueue" );    puts( "No3 En Queue (input)" );    puts( "No4 ClearQueue " );    puts( "No5 is empty?" );    puts( "No6 QueueLength" );    puts( "No7 GetHead" );    puts( "No8 DeQueue" );    puts( "No9 exit" );    printf( "please choose a number:" );    scanf( "%d", &choice);    while( 1 )    {           switch( choice )           {                case 1:        status = InitQueue( Q );        status_( status );        break;                case 2:status = DestroyQueue( Q );status_( status );break;case 3:printf( "input a number:" );scanf( "%d", &e );status = EnQueue( Q, e );status_( status );break;case 4:status = ClearQueue( Q );status_( status );break;case 5:status = QueueEmpty( Q );status_( status );break;case 6:status = QueueLength( Q );status_( status );break;case 7:status = GetHead( Q, e );printf( "%d\n", e);status_( status );break;case 8:status = DeQueue( Q, e );printf( "the del number is %d\n", e);status_( status );break;case 9:exit(-1);break;default:printf("wrong input exit!!\n");exit(-1);break;  }printf( "please choose a number:" );scanf( "%d", &choice );    }    return 0;}void status_( int sat )//status 状态判断{if( OK == sat )printf( "OK!\n" );else if( ERROR == sat )printf( "error\n" );elseprintf( "%d\n", sat );}Status InitQueue( LinkQueue & Q)//初始化队列{Q.front = Q.rear = ( QueuePtr )malloc( sizeof(QNode) );if( !Q.front )return ERROR;elseQ.front->next = NULL;return OK;}Status DestroyQueue( LinkQueue &Q ) //销毁队列{while( Q.front ){Q.rear = Q.front->next;free( Q.front );Q.front = Q.rear;}return OK;}Status EnQueue( LinkQueue &Q, QElemType e )//插入元素到队尾{QueuePtr p;p = ( QueuePtr )malloc( sizeof(QNode) );if( !p )return ERROR;else{p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;}return OK;}Status ClearQueue( LinkQueue &Q )//清空队列{if( Q.front == Q.rear ){puts( "the Queue is empty" );return OK;}else{QueuePtr p;p = Q.front;while( p != NULL ){free( p );p = p->next;}}return OK;}Status QueueEmpty( LinkQueue Q )//判断是否为空{if( Q.front == Q.rear )puts( "is empty " );elseputs( "unempty" );return OK;}int QueueLength( LinkQueue Q )//求队列元素个数{int i = -1;QueuePtr p = Q.front;while( p != NULL ){p = p->next;i++;}return i;}Status GetHead( LinkQueue Q, QElemType &e )//取得对头元素{if( Q.front == Q.rear ){puts( "empty" );return ERROR;}else{e = Q.front->next->data;}return OK;}Status DeQueue( LinkQueue Q, QElemType &e )//删除对头元素{QueuePtr p = Q.front;if( Q.front == Q.rear ){puts( "empty" );return ERROR;}else{p = p->next;e = p->data;Q.front->next = p->next;if( Q.rear == p )Q.rear == Q.front;free( p );}return OK;}


原创粉丝点击