链队列的C语言实现

#include <stdio.h>
#include <stdlib.h>

#define ERROR 0
#define OK 1

typedef int Status ;
typedef int ElemType;

typedef struct Lnode
{
        ElemType data;
        Lnode* next;
}Lnode, *Link;

typedef struct queue
{
        Link head;
        Link tail;
        int len;
} queue;

Status Init(queue &qq)
{
       qq.head = (Link)malloc(sizeof(Lnode));
       if (qq.head == NULL) return ERROR;
       qq.tail = qq.head;
       qq.head -> next = NULL;
       qq.len = 0;
       return OK;
}

Status GetTop(queue &qq, ElemType &e)
{
       if (qq.head == qq.tail)
       return ERROR;
       e = qq.head->next->data;
       return OK;
}

Status Enqueue(queue &qq, ElemType e)
{
       Link temp;
       temp = (Link)malloc(sizeof (Lnode));
       if (temp == NULL) return ERROR;
       temp->data = e;
       qq.tail -> next = temp;
       qq.tail = temp;
       qq.len++;
       qq.tail -> next = NULL;
       return OK;
}

Status Dequeue(queue &qq, ElemType &e)
{
       if (qq.head == qq.tail)
       return ERROR;
       e = qq.head -> next -> data;
       Link p = qq.head -> next;
       free(p);
       p = NULL;
       qq.head -> next = qq.head ->next ->next;
       if (qq.head -> next == NULL)                 //出队列时,最后一个元素出队列后的特殊情况,尾结点指针要指向 第一个结点 
       qq.tail = qq.head; 
       return OK;
}

Status Destroyqueue(queue &qq)
{
       Link q, tmp;
       q = qq.head -> next;
       free(qq.head);
       qq.head = NULL;
       while(q != NULL)
       {
               tmp = q -> next;
               free(q);
               q = tmp;
       }
       tmp = NULL;
       return OK;
}
int main()
{
    queue qq;
    int m, i;
    Init(qq);
    printf("how many nums?\n");
    scanf("%d", &m);
    for (i = 0; i < m; i++)
    {
        int e;
        scanf("%d", &e);
        Enqueue(qq, e);
    }
    int d;
    GetTop(qq, d);
    printf("%d\n", d);
    for(i = 0; i < m; i++)
    {
          int e;
          Dequeue(qq, e);
          printf("%d ", e);
    }
    printf("\n");
    system ("pause");
    return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值