网站首页 > 文章中心 > 其它

c语言函数队列_c语言while函数

作者:小编 更新时间:2023-08-22 13:35:26 浏览量:455人看过

用C语言编写队列程序

#includestdio.h

#includestdlib.h

#includemalloc.h

#define TRUE 1

#define FALSE 0

#define NULL 0

#define OK 1

#define OVERFLOW 0

#define ERROR 0

typedef int QElemType;

typedef int Status;

typedef struct QNode

{

QElemType data;

QNode *next;

}*QueuePtr;

struct LinkQueue

QueuePtr front,rear;//队头,队尾指针

};

//函数列表

void InitQueue(LinkQueue Q)

{//初始化一个队列

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!Q.front)//生成头结点失败

exit(OVERFLOW);

Q.front-next=NULL;

}

void DestoryQueue(LinkQueue Q)

{ //销毁队列

while(Q.front)

Q.rear=Q.front-next;//Q.rear指向Q.front的下一个结点

free(Q.front);//释放Q.front所指结点

Q.front=Q.rear;//Q.front指向Q.front的下一个结点

void ClearQueue(LinkQueue Q)

{ //将队列清为空

DestoryQueue(Q);//销毁队列

InitQueue(Q);//重新构造队列

Status QueueEmpty(LinkQueue Q)

{ //判断队列是否为空

if(Q.front-next==NULL)

return TRUE;

else return FALSE;

int QueueLength(LinkQueue Q)

{ //求队列的长度

int i=0;//计数器清0

QueuePtr p=Q.front;//p指向结点

while(Q.rear!=p)//p所指向的不是尾结点

i++;//计数器加1

p=p-next;

return i;

Status GetHead(LinkQueue Q,QElemType e)

{ //若队列不空,则用e返回队头元素

QueuePtr p;

if(Q.front==Q.rear) return ERROR;

p=Q.front-next;//p指向队头结点

e=p-data;//将队头元素的值赋给e

return OK;

void EnQueue(LinkQueue Q,QElemType e)

{ //插入元素e为队列Q的新的队尾元素

p=(QueuePtr)malloc(sizeof(QNode));

//动态生成新结点

if(!p)

p-data=e;//将e的值赋给新结点

p-next=NULL;//新结点的指针为空

Q.rear-next=p;//原队尾结点的指针域为指向新结点

Q.rear=p;//尾指针指向新结点

Status DeQueue(LinkQueue Q,QElemType e)

{ //若队列不为空,删除Q的队头元素,用e返回其值

if(Q.front==Q.rear)//队列为空

return ERROR;

e=p-data;//队头元素赋给e

Q.front-next=p-next;//头结点指向下一个结点

if(Q.rear==p)//如果删除的队尾结点

Q.rear=Q.front;//修改队尾指针指向头结点

free(p);

void QueueTraverse(LinkQueue Q,void(*visit)(QElemType))

{ //对队头到队尾依次对队列中每个元素调用函数visit()

p=Q.front-next;

while(p)

visit(p-data);//对p所指元素调用visit()

printf("\n");

void print(QElemType e)

void main()

int i,k;

QElemType d;

LinkQueue q;

InitQueue(q);//构造一个空栈

EnQueue(q,i);

printf("栈的元素为:");

QueueTraverse(q,print);

k=QueueEmpty(q);

printf("将队头元素赋给d\n");

k=GetHead(q,d);

printf("队头元素为d=%d\n",d);

printf("删除队头元素:\n");

DeQueue(q,d);

printf("删除后新的队头元素为d=%d\n",d);

printf("此时队列的长度为%d\n",QueueLength(q));

ClearQueue(q);//清空队列

printf("清空队列后q.front=%u,q.rear=%u,q.front-next=%u\n",q.front,q.rear,q.front-next);

DestoryQueue(q);

printf("销毁队列后,q.front=%u,q.rear=%u\n",q.front,q.rear);

C语言队列函数传递

当然可以,定义成全局变量或者在定义的那个函数返回此队列把此返回的队列作为实参传递给另一个函数

c语言调用队列库函数

q.push(m); // queue是C++STL模板库的东西,需要使用push来插入元素,详细信息你可以参考MSDN来了解其使用及内容.

c语言队列操作

pq-rear-next

=

pnew这个代码从队列的尾部增加新节点,

然后pq-rear

pnew更新队列尾部指针.队列的数据结构形式就是由一个头front指针,一个尾rear指针来表征,items的设计是用空间换时间,涉及队列大小的操作会非常方便.

队列的特征是先进先出,你给出的链式实现,其实就跟一个链表一样,链表的添加删除如果能理解了,队列只是链表的元素增加/删除

按先进先出特点的一种实现.

但对于队列来说,实现方式不是重点,先进先出的性质才是重点,这在实际应用中很多,比如排队叫号.

c语言 队列的操作

//定义队列结构体

typedef struct Qnode

int data;

struct Qnode *next;

} Queue , *QueuePtr;

typedef struct

QueuePtr front;

QueuePtr rear;

} linkQnode;

//创建一个队列

initQueue (linkQnode *q)

q - front = q - rear = (QueuePtr) malloc (sizeof (Queue));

if (!q - front) exit (0);

q - front - next = NULL;

//入队列

EnterQueue (linkQnode *q , int item)

p = (QueuePtr) malloc (sizeof (Queue));

if (!p) exit (0);

p - data = item;

p - next = NULL;

q - rear - next = p;

q - rear = p;

//出队列

DelQueue (linkQnode *q , int *item)

if (q - front = q - rear) return;

p = q - front - next;

*item = p - data;

q - front - next = p - next;

if (q - rear == p)

q - rear = q - front;

free (p);

以上就是土嘎嘎小编为大家整理的c语言函数队列相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章