c语言链式队列

没有想到的一点是
出队步骤
1;判断队列是否为空
2;将front后面的那个节点出列 (先保存
3;判断出队的那个节点是不是rear节点***没有想到这点???
4;释放该节点内存

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

//表示一个节点的类型 
typedef struct linknode_t
{
    int data;
    struct linknode_t *next;
}linknode;
//表示一个队列的类型    
typedef struct linkPoint_t
{
    linknode *front;
    linknode *rear;
}linkQueue;

linkQueue *queue;
linknode *node;

linkQueue *linkQueueInit();
void InlinkQueue(linkQueue *queue, int data);
int OutlinkQueue(linkQueue *queue);
int LQEmpty(linkQueue *queue);

int main()
{
    linkQueueInit();
    int num = 10;
    while(num--){
        InlinkQueue(queue, 1);
        InlinkQueue(queue, 10);
        InlinkQueue(queue, 100);
        printf("%d\n",OutlinkQueue(queue));
        printf("%d\n",OutlinkQueue(queue));
    }

    return 0;
}

linkQueue *linkQueueInit()
{
    //队列的初始化
    //1;创建一个队列 
    //2; 创建一个节点 
    //3对节点初始化 
    //4队列的头尾都指向这个节点
    //5返回这个队列 
    queue = (linkQueue *)malloc(sizeof(linkQueue));
    node = (linknode *)malloc(sizeof(linknode));
    node->next = NULL;
    queue->front = queue->rear = node;
    return queue;
}

void InlinkQueue(linkQueue *queue, int data)
{
    /*
        入队列步骤 
        1;创建一个节点 初始化(赋值data  next域NULL)
        2;rear指向的节点与该节点连接
        3;rear移动  指向该节点   
    */ 
    node = (linknode*)malloc(sizeof(linknode));
    node->data = data;
    node->next = NULL;
    queue->rear->next = node;
    queue->rear = node;
}

int OutlinkQueue(linkQueue *queue)
{
    /*
        出队步骤
        1;判断队列是否为空
        2;将front后面的那个节点出列 (先保存 
        3;判断出队的那个节点是不是rear节点*********没有想到这点???
        4;释放该节点内存 
    */ 
    int data;
    if(!LQEmpty(queue)){
        node = queue->front->next;
        data = node->data;
        queue->front->next = node->next;
        if(node == queue->rear){
            queue->rear = queue->front;
        }
        free(node);
        return data;
    }else{
        printf("队列为空\n");
        exit(0); 
    }
}

int LQEmpty(linkQueue *queue)
{
    if(queue->front == queue->rear){
        return 1;
    }else{
        return 0;
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,我帮你查找一下 C 语言链队列打印杨辉三角的代码: ``` #include <stdio.h> #include <stdlib.h> // 链队列节点 typedef struct QNode { int data; struct QNode *next; } QNode, *QueuePtr; // 链队列结构体 typedef struct { QueuePtr front; // 队头指针 QueuePtr rear; // 队尾指针 } LinkQueue; // 初始化队列 void InitQueue(LinkQueue *Q) { Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode)); if (!Q->front) { exit(-1); } Q->front->next = NULL; } // 入队列 void EnQueue(LinkQueue *Q, int e) { QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); if (!p) { exit(-1); } p->data = e; p->next = NULL; Q->rear->next = p; Q->rear = p; } // 出队列 int DeQueue(LinkQueue *Q) { int e; QueuePtr p; if (Q->front == Q->rear) { return -1; } p = Q->front->next; e = p->data; Q->front->next = p->next; if (Q->rear == p) { Q->rear = Q->front; } free(p); return e; } // 返回队列长度 int GetQueueLength(LinkQueue *Q) { int len = 0; QueuePtr p = Q->front->next; while (p) { len++; p = p->next; } return len; } // 打印杨辉三角,num 表示打印多少行 void print_yh_triangle(int num) { int i, j, a[num]; LinkQueue Q; InitQueue(&Q); for (i = 0; i < num; i++) { for (j = 0; j <= i; j++) { if (j == 0 || j == i) { a[j] = 1; } else { a[j] = DeQueue(&Q) + DeQueue(&Q);// 取出队列的前两个元素相加,组成新的元素入队列 } printf("%d ", a[j]); EnQueue(&Q, a[j]);// 新元素入队列 } printf("\n"); } } int main() { print_yh_triangle(5); return 0; } ``` 希望这个代码对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值