使用链表实现队列操作

代码如下:

#include 
#include 
#define NULL 0

struct node
{
    int data;
    struct node *next;
};

struct queue
{
    struct node *front, *rear;
};

struct queue q;

/*初始化队列首尾节点均为NULL*/
void createqueue() { q.front = q.rear = NULL; }

int empty()
{
    if (q.front == NULL)
        return 1;
    else
        return 0;
}

/*插入节点*/
void insert(int x)
{
    struct node *pnode;

    pnode = (struct node *)malloc(sizeof(struct node));
    if (pnode == NULL)
    {
        printf("Memory overflow. Unable to insert.\n");
        exit(1);
    }

    pnode->data = x;
    pnode->next = NULL; /*新节点是最后一个节点*/

    if (empty())
        q.front = q.rear = pnode;
    else
    {
        (q.rear)->next = pnode;
        q.rear = pnode;
    }
}

/*删除节点*/
int removes()
{
    int x;
    struct node *p;

    if (empty())
    {
        printf("Queue Underflow. Unable to remove.\n");
        exit(1);
    }

    p = q.front;
    x = (q.front)->data;
    q.front = (q.front)->next;
    if (q.front == NULL) 
        q.rear = NULL;
    free(p);
    return x;
}

/*显示节点*/
void show()
{
    struct node *p;

    if (empty())
        printf("Queue empty. No data to display \n");
    else
    {
        printf("Queue from front to rear is as shown: \n");

        p = q.front;
        while (p != NULL)
        {
            printf("%d ", p->data);
            p = p->next;
        }

        printf("\n");
    }
}

/*销毁队列*/
void destroyqueue() { q.front = q.rear = NULL; }

int main()
{
    int x, ch;

    createqueue();

    do
    {
        printf("\n\n  Menu: \n");
        printf("1:Insert \n");
        printf("2:Remove \n");
        printf("3:exit \n");
        printf("Enter your choice: ");
        scanf("%d", &ch);

        switch (ch)
        {
        case 1:
            printf("Enter element to be inserted: ");
            scanf("%d", &x);
            insert(x);
            show();
            break;

        case 2:
            x = removes();
            printf("Element removed is: %d\n", x);
            show();
            break;

        case 3:
            break;
        }
    } while (ch != 3);

    destroyqueue();

    return 0;
}

运行结果:

 Menu: 
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 99
Queue from front to rear is as shown: 
99 


  Menu: 
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 88
Queue from front to rear is as shown: 
99 88 


  Menu: 
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 11
Queue from front to rear is as shown: 
99 88 11 


  Menu: 
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 99
Queue from front to rear is as shown: 
88 11 
 

你可能感兴趣的:(数据结构和算法,1024程序员节)