吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3269|回复: 6
收起左侧

[C&C++ 转载] 【数据结构学习笔记】c语言创建循环队列(数组)

[复制链接]
流浪的二胡 发表于 2018-11-2 18:32
本帖最后由 流浪的二胡 于 2018-11-2 18:34 编辑

先放头文件:
[Asm] 纯文本查看 复制代码
#ifndef QUEUE_DAT

typedef int Item;
typedef struct node *Queue;

Queue create(void);
bool is_empty(Queue q);
bool is_full(Queue q);
void push(Queue q, Item x);
Item pop(Queue q);
void showqueue(Queue q);

#endif // !QUEUE_DAT



函数体:
[C] 纯文本查看 复制代码
#include<stdio.h>
#include<stdlib.h>
#include"queueDAT2.h"

#define MAX 10

/*定义结构体*/
struct node
{
        Item *value;
        int front, rear;
};


/*创建队列*/
Queue create(void)
{
        Queue q;
        q = (struct node *)malloc(sizeof(struct node));

        q->value = (Item *)malloc(sizeof(Item));

        q->front = MAX - 1;
        q->rear = MAX - 1;
        return q;
}


/*队空*/
bool is_empty(Queue q)
{
        return q->front == q->rear;
}


/*队满*/
bool is_full(Queue q)
{
        return (q->rear + 1) % MAX == q->front;
}


/*入队*/
void push(Queue q, Item x)
{
        if (is_full(q))
                printf("队满!");

        q->rear = (q->rear + 1) % MAX;
        q->value[q->rear] = x;
}


/*出队*/
Item pop(Queue q)
{
        Item x;
        if (is_empty(q))
                printf("队空!");

        q->front = (q->front + 1) % MAX;
        x = q->value[q->front];
        return x;
}


/*显示队列元素*/
void showqueue(Queue q)
{
        int n=0,m;
        while (!is_empty(q))
        {
                q->front = (q->front + 1) % MAX;
                m = q->value[q->front];
                printf(" %d ", m);
                n++;
        }
        for (int i = 0; i < n; i++)
        {
                q->front = (q->front - 1) % MAX;
        }
}



测试函数:
[C] 纯文本查看 复制代码
#include<stdio.h>
#include<stdlib.h>
#include"queueDAT2.h"


int main(void)
{
        Queue p;
        p = create();
        push(p, 3);
        push(p, 27);
        push(p, 15);
        showqueue(p);
        pop(p);
        printf("\n");
        showqueue(p);
        getchar();
}


运行结果:
QQ截图20181102183124.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 流浪的二胡 发表于 2018-11-2 18:36
下次的话再用java写一遍。

显示队列用的是笨方法,移动了几步显示后,再回退几步,保证不影响到指针数组的入队、出队操作。
头像被屏蔽
a670866637 发表于 2018-11-2 18:54
LeLeXia 发表于 2018-11-2 18:55
s02lk 发表于 2018-11-16 22:02
我决定明天也和楼主一样,发个代码
hskan 发表于 2018-11-17 13:48
有些代码看不懂,我还需要多学习呀
Keing 发表于 2018-11-17 16:50
话说既然加了#ifndef 为什么不加个#define呢.....吾爱破解论坛有你更精彩
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-28 23:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表