链队的一些操作

来源:互联网 发布:pla 算法初始化 编辑:程序博客网 时间:2024/04/20 00:09

头文件

#ifndef _LINKQUEUE_H_#define _LINKQUEUE_H_#define SUCCESS 10000#define FAILURE 10001typedef int ElemType;typedef struct node{    ElemType data;    struct node *next;}Node;typedef struct queue{    Node *front;    Node *rear;}Queue;#endif

接口函数

#include<stdio.h>#include"Linkqueue.h"#include<stdlib.h>int InitQueue(Queue *Q){    Q->front=(Node *)malloc(sizeof(Node));    if(NULL == Q->front)    {        return FAILURE;    }    Q->front->next = NULL;    Q->rear=Q->front;    return SUCCESS;}int EnQueue(Queue *Q,ElemType e){    Node *p=(Node *)malloc(sizeof(Node));    p->data = e;    p->next = NULL;    Q->rear->next =p;    Q->rear = p;    return SUCCESS;}int QueueLength(Queue Q){    Node *p = Q.front;    int count=0;    while(p->next!=NULL)    {        count++;        p=p->next;    }    return count;}int GetFront(Queue Q){    if(Q.front->next==NULL)    {        return FAILURE;    }    return (Q.front->next->data);}int DelQueue(Queue *Q){    ElemType e;    Node *p=Q->front->next;    if(p==NULL)    {        return FAILURE;    }    Q->front->next=p->next;    e=p->data;    free(p);    if(Q->front->next==NULL)    {        Q->rear=Q->front;    }    return e;}int ClearQueue(Queue *Q){    Node *p=Q->front->next;    if(p==NULL)    {        return FAILURE;    }    while(p!=NULL)    {        Q->front->next=p->next;        free(p);        p=Q->front->next;        if(Q->front->next==NULL)        {            Q->rear=Q->front;        }    }    return SUCCESS;}int DestroyQueue(Queue *Q){    free(Q->front);    Q->front=NULL;    Q->rear=NULL;    return SUCCESS;}

主函数

#include<stdio.h>#include"Linkqueue.h"int main(){    int ret,i;    ElemType e;    Queue sq;    ret=InitQueue(&sq);    if(ret==FAILURE)    {        printf("Init Failure!\n");    }    else    {        printf("Init Success!\n");    }    for(i=0;i<8;i++)    {        e = i+1;        ret=EnQueue(&sq,e);        if(ret==FAILURE)        {            printf("Enter Failure!\n");        }        else        {            printf("Enter %d Success!\n",e);        }    }    printf("The length is %d \n",QueueLength(sq));    printf("The front is %d \n",GetFront(sq));    for(i=0;i<7;i++)    {        ret = DelQueue(&sq);        if(ret == FAILURE)        {            printf("Delete Failure!\n");        }        else         {            printf("Delete %d Success!\n",ret);        }    }    ret = ClearQueue(&sq);    if(ret == FAILURE)    {        printf("Clear Failure!\n");    }    else    {        printf("Clear Success!\n");    }    printf("The length is %d \n",QueueLength(sq));   ret = DestroyQueue(&sq);   if(FAILURE == ret)       {           printf("Destroy Failure!\n");       }       else       {           printf("Destroy Success!\n");       }    return 0;}