数据结构-两个链式队列实现一个栈

版权声明:转载请注明出处 https://blog.csdn.net/qq_37689106/article/details/82951001
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
    int data;
    struct node *next;
}linklist_t;
typedef struct __queue__
{
    struct node *front;
    struct node *rear;
}linkqueue_t;
//**************************************************************
linkqueue_t * creat_linkqueue(void)
{
    linkqueue_t * q = (linkqueue_t *)malloc(sizeof(linkqueue_t));
    linklist_t  * l = (linklist_t * )malloc(sizeof(linklist_t));
    l->data = 0;
    l->next = NULL;
    q->front = q->rear =l;
    return q;
}


//**************************************************************
int queue_is_empty(linkqueue_t *q)
{
    return (q->front == q->rear)?1:0;
}

//**************************************************************

void en_queue(linkqueue_t *q,int val)
{
    linklist_t *l = (linklist_t *)malloc(sizeof(linklist_t));
    l->data = val;
    l->next = q->rear->next;
    q->rear->next = l;
    q->rear = l;
}
//**************************************************************
void de_queue(linkqueue_t *q,int *val)
{
    if (queue_is_empty(q))
    {
        printf("queue_is_empty\n");
    }
    else
    {
        linklist_t *t =  q->front->next;
        *val = t->data;
        q->front->next = t->next;
        if (t->next == NULL)
            q->rear = q->front ; 
        free(t);
    }
}

//**************************************************************

void push_linkstack(linkqueue_t *q,int val)

{
    en_queue(q,val);
}

//**************************************************************

void pop_linkstack(linkqueue_t *q1,linkqueue_t *q2,int *val)
{
    int size=0,k,tmp;
    while(1)
    {
        if (q1->front->next->next != NULL)
        {
        de_queue(q1,&tmp);
        en_queue(q2,tmp);
        size++;
        }
        else
        {
            de_queue(q1,val);
            break;
        }
    }
    for(k=1;k<=size;k++)
    {
        de_queue(q2,&tmp);
        en_queue(q1,tmp);
    }
}

int main()
{
    linkqueue_t *Q1 = creat_linkqueue();
    linkqueue_t *Q2 = creat_linkqueue();
    int val,i,n=10;
    for(i=1;i<=n;i++)
    {
        push_linkstack(Q1,i);
        printf("%-3d",i);
    }
    printf("\n");
    for(i=0;i<n;i++)
    {
        pop_linkstack(Q1,Q2,&val);
        printf("%-3d",val);
    }
    printf("\n");

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37689106/article/details/82951001
今日推荐