编写一个程序实现顺序循环队列的各种基本运算,并在此基础上设计一个主程序完成如下功能

编写一个程序实现顺序循环队列的各种基本运算,并在此基础上设计一个主程序完成如下功能,第1张

#include <stdio.h>

#include <malloc.h>

#define Maxqsize 5

typedef char ElemType

typedef struct

{

ElemType elem[Maxqsize]

int front,rear

}SqQueue

void InitQueue(SqQueue *&q)

{

q=(SqQueue *)malloc (sizeof(SqQueue))

q->front=q->rear=0

}

void ClearQueue(SqQueue *&q)

{

free(q)

}

int QueueLength(SqQueue *q)

{

return (q->rear-q->front+Maxqsize)%Maxqsize

}

int QueueEmpty(SqQueue *q)

{

return(q->front==q->rear)

}

int enQueue(SqQueue *&q,ElemType e)

{

if ((q->rear+1)%Maxqsize==q->front)

return 0

q->rear=(q->rear+1)%Maxqsize

q->elem[q->rear]=e

return 1

}

int deQueue(SqQueue *&q,ElemType &e)

{

if (q->front==q->rear)

return 0

q->front=(q->front+1)%Maxqsize

e=q->elem[q->front]

return 1

}

void main()

{

ElemType e

SqQueue *q

printf("橘轿(1)初始化队列Q\n")

InitQueue(q)

printf("(2)依次进队列元素A,B,C\n")

if (enQueue(q,'A')==0) printf("队满,不能进队\n")

if (enQueue(q,'B')==0) printf("队满升竖,不能进队\n")

if (enQueue(q,'C')==0) printf("队满,不能进队\n")

printf("(3)队列为%s\n",(QueueEmpty(q)?"空":"非空"))

if (deQueue(q,e)==0)

printf("队空,不能出队\n")

else

printf("(4)出队一个元素%c\n",e)

printf("(5)队列Q的元素个数:%d\n",QueueLength(q))

printf("(6)依次进队列元素D,E,F\n")

if (enQueue(q,'D')==0) printf("队满,不能进队\n")

if (enQueue(q,'E')==0) printf("队满,不能进队\n")

if (enQueue(q,'F')==0) printf("队满,不能进队\n"吵伍大)

printf("(7)队列Q的元素个数:%d\n",QueueLength(q))

printf("(8)出队列序列:")

while (!QueueEmpty(q))

{ deQueue(q,e)

printf("%c ",e)

}

printf("\n")

printf("(9)释放队列\n")

ClearQueue(q)

}

#include<stdio.h>

#include<stdbool.h>

#include<malloc.h>

typedef

int

typedata

struct

node

{

struct

node

*prev,

*next

typedata

data

}

typedef

struct

node

node

typedef

struct

node*

link

//

============init_head===============

//

//头节点的初始化

link

init_head(void)

{

link

head

=

(link)malloc(sizeof(node))

if(head

!=

NULL)

{

head->prev

=

head->next

=

head

}

return

head

}

//

============newnode

================

//

//创建新节点

link

newnode(typedata

data)

{

link

new

=

(link)malloc(sizeof(node))

if(new

!=

NULL)

{

//前趋指针和后趋指针都指向自己

new->prev

=

new->next

=

new

new->data

=

data

}

return

new

}

//

=================is_empty================

//

bool

is_empty(link

head)

{

//为空时,头节点的前趋指针和后趋指针都指向head(头节点)

if((head->next==head)

&&

(head->prev==head))

return

true

return

false

}

//

================insert_tail

==================

//

void

insert_tail(link

head,

link

new)

{

if(is_empty(head))

{

//第一个节点插入

head->next

=

head->prev

=

new

new->next

=

new->prev

=

head

return

}

//除了第一个节点插入

new->prev

=

head->prev

new->next

=

head

new->prev->next

=

new

new->next->prev

=

new

}

//

================show

====================

//

void

show(link

head)

{

//为空时,直接返回

if(is_empty(head))

return

//遍历整个链

link

tmp

=

head->next

while(tmp

!=

head)

{

printf("%d\t",

tmp->data)

tmp

=

tmp->next

}

printf("\n")

}

//

==============insert_opint

===============

//

void

insert_opint(link

end_node,

link

p)

{

p->prev

=

end_node

p->next

=

end_node->next

end_node->next->prev

=

p

end_node->next

=

p

}

//

================insertion_sort===========

//

//顺序排序

void

insertion_sort(link

head)

{

if(is_empty(head))

return

//把队列分拆,头节点和第一个节点为一个已排序的队列,

//其他的节点逐个比较已排序队列插

link

p

=

head->next->next

head->prev->next

=

NULL

head->next->next

=

head

head->next->prev

=

head

head->prev

=

head->next

while(p

!=

NULL)

{

link

end_node

=

head->prev

if(p->data

>

end_node->data)

{

link

tmp

=

p

p

=

p->next

insert_tail(head,

tmp)

}

else

{

while(end_node!=head

&&

p->data<end_node->data)

end_node

=

end_node->prev

link

tmp

=

p

p

=

p->next

insert_opint(end_node,

tmp)

}

}

}

int

main(void)

{

link

head

=

init_head()

if(head

==

NULL)

{

printf("falure\n")

return

0

}

typedata

data

while(1)

{

if(scanf("%d",

&data)

!=

1

)

break

link

new

=

newnode(data)

if(new

==

NULL)

{

printf("falure\n")

return

0

}

insert_tail(head,

new)

show(head)

}

printf("the

figure

is:\n")

show(head)

insertion_sort(head)

show(head)

return

0

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12506602.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存