|
发表于 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
这不是c的语法
c可以这么写么?
bool initialize(LinkQueue &q)
c可以传指针,但c不能传引用
|
|