创建队列 出队 入队 显示队列(链式)

#include <stdlib.h>
 
typedef  int datatype;
 
/* 定义节点存储入队元素和指向下一节点的指针  */
typedef struct node{
    datatype data;
    struct node *next;
}NODE;
 
/* 定义节点存放队尾和对首指针  */
typedef struct poiner{
    NODE *front;
    NODE *rear;
}Linknode;
 
/* 创建队列以及初始化函数  */
void created(Linknode *H);
 
/* 入队函数  */
void enqueue(Linknode *H, int data);
-----------------------------------------------------------------------
 
 
#include <stdio.h>
#include "queue.h"
 
/***********************************************************************
 * 队列:只允许在一端进行插入,而在另一端进行删除操作的线性表
 * FIFO(First In First Out)允许插入的一端为队尾 允许删除的一端为队头
 * 链式队列其实就是单链表只能尾进头出
 ***********************************************************************/ 
 
/* 创建队列以及初始化函数  */
void created(Linknode *H)
{    
    /* 定义节点并初始化 */
    NODE *M;
    M = (NODE *)malloc(sizeof(NODE));
    if (M == NULL)
    {
        printf("创建队列中malloc失败\n");
        return;
    }
    M->next = NULL;
 
    /* 让队尾队首指向头节点 */
    H->front = M;
    H->rear = M;
 
    return;
}
 
/* 入队函数  */
void enqueue(Linknode *H, int data)
{
    NODE *P;
    P = (NODE *)malloc(sizeof(NODE));
    if (P == NULL)
    {
        printf("入队函数申请内存失败\n");
        return;
    }
 
    P->data = data;
    P->next = NULL;
 
    H->rear->next = P;/* 让新节点挂在队尾  */
    H->rear = P;/* 队尾指向P节点  */
    printf("%d入队成功\n",data);
    return;
}
 
/* 出队函数  */
datatype dequeue(Linknode *H)
{    
    NODE *M;
    int x;
    M = (NODE *)malloc(sizeof(NODE));
    if (M == NULL)
    {
        printf("出队函数malloc失败\n");
        return -1;
    }
 
    if (H->front == H->rear)
    {
        printf("队列为空\n");
        x = 0;
    }
    else
    {
        M = H->front->next;/* 保存第一个节点  */
        H->front->next = M->next;/* 指向出队元素后面的节点 */
        if (M->next == NULL)
        {
            H->rear = H->front;
        }
        x = M->data;
        free(M);
        M = NULL;
    }
    return x;
}
 
/* 显示队列中元素  */
void display(Linknode H)
{
    NODE *M;
    M = (NODE *)malloc(sizeof(NODE));
    M = H.front->next; /* 指向第一个数据元素节点 */
 
    while(M != NULL)
    {
        printf("data = %d\n",M->data);
        M = M->next;/* 指向下一个节点 */
    }
    printf("显示结束\n");
    return;
}
----------------------------------------------------------------------------------
 
 
#include <stdio.h>
#include "queue.h"
int main(int argc, char *argv[])
{
    int comand;
    Linknode *H;
    int num;
    int value;
    int i;
    H =(Linknode *)malloc(sizeof(Linknode));
    if (H == NULL)
    {
        printf("malloc failed\n");
        return -1;
    }
    do{
        printf("\n");
        printf("        1 创建队列\n");
        printf("        2 向队列插入元素\n");
        printf("        3 从队列删除元素\n");
        printf("        4 显示队列中元素\n");
        printf("        5 退出\n");
        printf("-------------------------------\n");
        printf("请输入对应操作的数字(1 2 3 4 5)\n");
        scanf("%d", &comand);
        switch (comand)
        {
        case 1:
                    created(H);
            printf("请输入你要创建元素的个数:\n");
            scanf("%d", &num);
            for (i = 1; i <= num; i++ )
            { 
                scanf("%d",&value);
                enqueue(H, value);
            }
 
            break;
        case 2:
            puts("输入你想要插入的元素:\n");
            scanf("%d", &value);
            enqueue(H, value);
            break;
        case 3:
            printf("outqueue-data:%d\n",dequeue(H));
            break;
        case 4:
            display(*H);
            break;
        case 5:
            printf("正在退出....\n");
            return 0;
        default:
            printf("请检查你的输入是否有误\n");
            return -1;
        }
 
    }while(1);
    return 0;
}
--------------------------------------------------------------------------------------
linux@ubuntu:~/haitao/squeue_linklist_队列$ ./test 
 
        1 创建队列
        2 向队列插入元素
        3 从队列删除元素
        4 显示队列中元素
        5 退出
-------------------------------
请输入对应操作的数字(1 2 3 4 5)
1
请输入你要创建元素的个数:
3
1
1入队成功
2
2入队成功
3
3入队成功
 
        1 创建队列
        2 向队列插入元素
        3 从队列删除元素
        4 显示队列中元素
        5 退出
-------------------------------
请输入对应操作的数字(1 2 3 4 5)
3
outqueue-data:1
 
        1 创建队列
        2 向队列插入元素
        3 从队列删除元素
        4 显示队列中元素
        5 退出
-------------------------------
请输入对应操作的数字(1 2 3 4 5)
4
data = 2
data = 3
显示结束
 
        1 创建队列
        2 向队列插入元素
        3 从队列删除元素
        4 显示队列中元素
        5 退出
-------------------------------
请输入对应操作的数字(1 2 3 4 5)
5
正在退出....

 

posted @ 2016-07-27 10:14  喻晓生  阅读(5085)  评论(0编辑  收藏  举报