鱼C论坛

 找回密码
 立即注册
查看: 1735|回复: 1

[已解决]有一个源代码,C的语法,但只能将后缀改为cpp才能完成编译

[复制链接]
发表于 2017-5-9 17:57:39 From FishC Mobile | 显示全部楼层 |阅读模式
0鱼币
#include<malloc.h>
#include<stdio.h>
/*queueNode链表结点的声明*/
typedef struct queueNode
{
        int data;
        queueNode *next;
}*QueuePtr;
/*LinkQueue队列的声明*/
struct LinkQueue
{
        QueuePtr front, rear; /*队头、队尾指针*/
};
/*构造一个空队列*/
bool initialize(LinkQueue &q)
{
        if(!(q.front=q.rear=(QueuePtr)malloc(sizeof(queueNode))))
        {
                printf("Memory Error!");
                return false;
        }
        q.front->next=NULL;
        return true;
}
/*判断队列是否为空*/
bool isEmpty(LinkQueue q)
{
        if(q.front==q.rear)
                return true;
        else
                return false;
}
/*插入一个新的队尾元素*/
void add(LinkQueue &q, int value)
{
        QueuePtr p=(QueuePtr)malloc(sizeof(queueNode));
        if(!p)
        {
                printf("Memory Error!");
                return;
        }
        p->data=value;
        p->next=NULL;
       
        q.rear->next=p;
        q.rear=p;
}
/*遍历输出队列*/
void traverse(LinkQueue q)
{
        QueuePtr p;
        p=q.front->next;

        printf("The values in the queue are:\n");
        while(p)
                {
                        printf("%d ",p->data);
                        p=p->next;
                }
        printf("\n");
}
/*求队列的长度*/
int getLength(struct LinkQueue q)
{
        int i=0;
        QueuePtr p;
        p=q.front;
        while(q.rear !=p)
        {
                i++;
                p=p->next;
        }
        return i;
}
/*读取队列首元素,若队列不为空,则返回True,否则返回False*/
bool getHead(LinkQueue q, int * value)
{
        if(q.front==q.rear)
                return false;
        * value=q.front->next->data;
        return true;
}
/*若队列不为空,删除队头元素*/
bool remove(LinkQueue &q)
{
        QueuePtr p;
        if(q.front==q.rear)
                return false;
        p=q.front->next;

        q.front->next=p->next;
        if(q.rear==p)
                q.rear=q.front;
        free(p);
        return true;
}
/*销毁队列*/
void destroy(LinkQueue &q)
{
        while(q.front)
        {
                q.rear=q.front->next;
                free(q.front);
                q.front=q.rear;
        }
}
/*队列的定义及实现*/
int main()
{
        LinkQueue queue;
        initialize(queue);
        isEmpty(queue)==true ?
printf("Empty Queue!\n") : printf("Not Empty Queue!\n");
       
        int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
       
        int i = 0;
        for(; i<8; i++){
                add(queue, a[i]);
        }
        traverse(queue);

        printf("The length of the queue is: %d\n", getLength(queue));
  
        int value;
        if(getHead(queue, &value)==true)
                printf("The head value is: %d\n", value);

        remove(queue);
        printf("\nAfter delete the head of the queue...\n");
        traverse(queue);

        destroy(queue);
        printf("\nDestroy the queue...\n");
        printf("queue.front=%d queue.rear=%d\n",queue.front, queue.rear);

        return 0;
}
debian 9.0,
gcc 6.3
3q
最佳答案
2017-5-9 17:57:40
这不是c的语法

c可以这么写么?

bool initialize(LinkQueue &q)

c可以传指针,但c不能传引用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-9 17:57:40 | 显示全部楼层    本楼为最佳答案   
这不是c的语法

c可以这么写么?

bool initialize(LinkQueue &q)

c可以传指针,但c不能传引用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 04:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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