顺序队列实现c语言,c语言顺序队列的基本操作

本文目录一览:

C语言.实现一个顺序存储的循环队列。

typedef struct _queue

{

int head;

int tail;

int len;

int capacity;

int * arr;

}QUEUE, *PQUEUE;

int Queue_Create(QUEUE ** que, int _len)

{

if (_len  0 || _len  10000)

{

printf(“len is err !\n”);

return -1;

}

PQUEUE temp = (PQUEUE)malloc(sizeof(QUEUE));

if (NULL == temp)

{

printf(“malloc err !\n”);

return -2;

}

memset(temp, 0, sizeof(QUEUE));

temp-arr = (int *)malloc(sizeof(int)* _len);

if (NULL == temp-arr)

{

printf(“malloc err !\n”);

return -3;

}

memset(temp-arr, 0, sizeof(int)* _len);

temp-head = 0;

temp-tail = 0;

temp-len = 0;

temp-capacity = _len;

*que = temp;

return 0;

}

int Queue_En(PQUEUE que, int num)

{

if (NULL == que)

{

printf(“que is NULL\n”);

return -1;

}

que-arr[que-tail] = num;

que-len++;

que-tail = (que-tail + 1) % que-capacity;

return 0;

}

int Queue_IsFull(PQUEUE que)

{

if (NULL == que)

{

printf(“que is NULL\n”);

return 0;

}

if ((que-tail + 1) % que-capacity == que-head)

{

return 1;

}

return 0;

}

int Queue_Empth(PQUEUE que)

{

if (NULL == que)

{

printf(“que is NULL\n”);

return 0;

}

if (0 == que-len)

{

return 1;

}

return 0;

}

int Queue_Out(PQUEUE que, int * num)

{

if (Queue_Empth(que))

{

return -1;

}

*num = que-arr[que-head];

que-len–;

que-head = (que-head + 1) % que-capacity;

return 0;

}

int Queue_Free(PQUEUE * que)

{

if (NULL == que || NULL == *que)

{

return -1;

}

PQUEUE temp = *que;

if (temp-arr != NULL)

{

free(temp-arr);

}

free(temp);

*que = NULL;

printf(“free success !\n”);

return 0;

}

void main()

{

PQUEUE queue = NULL;

int ret = Queue_Create(queue, 10);

if (0 == ret)

{

printf(“create success !\n”);

}

int num = 0;

Queue_En(queue, 99);

Queue_En(queue, 88);

Queue_En(queue, 77);

Queue_En(queue, 9);

Queue_En(queue, 8);

Queue_En(queue, 7);

for (int i = 0; i  queue-len; i++)

{

printf(“%d\n”, queue-arr[i]);

}

Queue_Out(queue, num);

printf(“%d\n”, num);

Queue_Free(queue);

system(“pause”);

}

C语言 顺序队列插入

#includestdio.h

#define N 10

void main()

{

int i,j,k,n,a[N];

printf(“请输入第1个数字:”);

scanf(“%d”,a[0]);

for(i=1;iN;i++){

printf(“请输入第%d个数字:”,i+1);

scanf(“%d”,n);

for(j=0;ji;j++)

if(na[j]){

for(k=i;kj-1;k–)

a[k]=a[k-1];

a[j]=n;

break;

}

if(j==i)

a[j]=n;

}

for(i=0;i10;i++)

printf(“%3d”,a[i]);

}

C语言用数组实现顺序队列求大神帮助

#include “stdio.h” main() { int que[200] = {0} ; int start = 0, end = 0; int i; char ch; printf(“please enter 6 num:”); for(i=0;i6;i++) scanf(“%d”,que[i]); end = 5; for(i=start;i=end;i++) printf(“%d “,que[i]); printf(“\n”); while(1) { printf(“What do you want to do? \n’i’ to insert\n’d’ to delete\n’q’ to quit\n”); switch(ch = getch()) { case ‘i’: end++; printf(“please enter the num:”); scanf(“%d”,que); for(i=start;i=end;i++) printf(“%d “,que[i]); printf(“\n”); break; case ‘d’: start++; for(i=start;i=end;i++) printf(“%d “,que[i]); printf(“\n”); break; case ‘q’: exit(0); } } }

C语言编程题,实现一个顺序存储的循环队列。

#includestdio.h

#includestdbool.h

#includemalloc.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-dataend_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://www.506064.com/n/304847.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2025-01-01 11:06
下一篇 2025-01-01 11:06

相关推荐

  • Python栈操作用法介绍

    如果你是一位Python开发工程师,那么你必须掌握Python中的栈操作。在Python中,栈是一个容器,提供后进先出(LIFO)的原则。这篇文章将通过多个方面详细地阐述Pytho…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • Python操作数组

    本文将从多个方面详细介绍如何使用Python操作5个数组成的列表。 一、数组的定义 数组是一种用于存储相同类型数据的数据结构。Python中的数组是通过列表来实现的,列表中可以存放…

    编程 2025-04-29
  • Python中的队列定义

    本篇文章旨在深入阐述Python中队列的定义及其应用,包括队列的定义、队列的类型、队列的操作以及队列的应用。同时,我们也会为您提供Python代码示例。 一、队列的定义 队列是一种…

    编程 2025-04-29
  • RabbitMQ和Yii2的消息队列应用

    本文将探讨RabbitMQ和Yii2之间的消息队列应用。从概念、安装和配置、使用实例等多个方面详细讲解,帮助读者了解和掌握RabbitMQ和Yii2的消息队列应用。 一、Rabbi…

    编程 2025-04-29
  • Python操作MySQL

    本文将从以下几个方面对Python操作MySQL进行详细阐述: 一、连接MySQL数据库 在使用Python操作MySQL之前,我们需要先连接MySQL数据库。在Python中,我…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python磁盘操作全方位解析

    本篇文章将从多个方面对Python磁盘操作进行详细阐述,包括文件读写、文件夹创建、删除、文件搜索与遍历、文件重命名、移动、复制、文件权限修改等常用操作。 一、文件读写操作 文件读写…

    编程 2025-04-29

发表回复

登录后才能评论