c语言建立队列函数 c语言队列的用法
如何用C语言建立一个空队列?
简单点的话
创新互联是一家集成都做网站、网站设计、网站页面设计、网站优化SEO优化为一体的专业网站设计公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。
直接用数组模拟就行了吧
简单写了一下:
/******************************
author : delta
version: 1.0
date : 2010-8-31
*******************************/
#include stdio.h
#include memory.h
#define debug 1
#define MaxN 1024
struct queue {
int q[MaxN];
int front;
int rear;
// initial the queue
void initial() {
front = 0;
rear = 0;
memset(q, 0, sizeof(q));
}
// judge wether the queue is empty or not
bool empty() {
return front == rear;
}
// insert an element
void push(int x) {
if (rear == MaxN) {
printf("The queue is fool !\n");
}
q[rear] = x;
++rear;
}
// delete an element
void pop() {
if (empty()) {
printf("There is no element in the queue !\n");
}
++front;
}
// look up the first element
int top() {
if (empty()) {
printf("There is no element in the queue !\n");
}
return q[front];
}
};
int main()
{
#if debug
int x;
struct queue q;
q.initial();
q.push(1);
q.push(2);
x = q.top();
printf("q's first elememt is: %d\n", x);
q.pop();
printf("q is %s\n", q.empty()?"empty":"not empty");
q.push(3);
x = q.top();
printf("q's first element is: %d\n", x);
q.initial();
printf("q is %s\n", q.empty()?"empty":"not empty");
#endif
return 0;
}
c语言 队列问题
//改正如下,但是我觉得你那个出队有点问题,不应当是自己输入要出队的元素吧,是让他自己出队吧,然后把这个出队的元素值带回来,再在主函数中输出吧,没给你改,嘿嘿嘿嘿
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 5
typedef struct k
{
int data[MAXSIZE];
int front,rear;
int num;
}c_k; //声明循环顺序队列的数据类型
//创建循环队列
c_k *create_k()
{
c_k * cq=(c_k *)malloc(sizeof(c_k)); //开辟循环队列的空间,并将地址存到变量cq中
cq-front=-1;
cq-rear=-1;
cq-num=0;//初始化为空队列
return cq;//返回队列的地址
}
int In_ck(c_k * cq,int *x)//-----在传的时候是个地址,所以这要用int *x-------///如果要用int x的话,在调用该函数时就要写成In_ck(cq,rear_x)--//
{
if(cq-num==MAXSIZE)//队列已满
{
printf("The c_k is full!\n");return -1;
}
else//队列不满
{
cq-rear=(cq-rear+1)%MAXSIZE;//形成循环
cq-data[cq-rear]=*x;/////------传的是地址,所以这要用*x----/////
cq-num++;//队列中元素个数增1
return 1;
}
}
//出队
int Out_ck(c_k * cq, int *x)//对cq所指向的队列出队,将队首元素存到x所指向的变量,并返回是否出队成功
{
if(cq-num==0)//队列为空
{
printf("The k is null!\n");return -1;
}
else//队列非空
{
cq-front=(cq-front+1)%MAXSIZE;//形成循环
*x=cq-data[cq-front];//将队首元素存到x所指向的变量
cq-num--;//队列中元素个数减1
return 1;
}
}
void main()
{
//调用创建队列函数
c_k * cq=create_k();
int rear_x,front_x;
int op,result;
printf("\n请输入 1入队,2出队,3退出:\n");
scanf("%d",op);
while(op!=3)
{
switch(op)
{
case 1:printf("请入入队元素:\n");
scanf("%d",rear_x);////----这要加号,!!!!!
if((result=In_ck(cq,rear_x))==1)////----加了一个if语句,在队空时就不输出元素了-----////
printf("入对元素是 %d\n",rear_x);
break;
case 2:printf("请输入出队元素:\n");
scanf("%d",front_x);////----这要加号,!!!!!
if ((result= Out_ck(cq,front_x))==1)////----加了一个if语句,在队空时就不输出元素了-----////
printf("出对元素是 %d\n",front_x);
break;
}
printf("\n请输入 1入队 2出队 3退出:\n");scanf("%d",op);
}
free(cq); /////---动态开辟的,用后要用free()释放;---////
}
队列的建立与查询【用C语言编写的完整程序(包括main()函数】
我的理解是 你想用数组模拟 队列?不是的话下面不用看,回复我给我再说一下题意,我重新给你写!
首先输入一个操作,1入队,2出队,3退出
如果是1,再输入一个将要入队列的 数据,
#include stdio.h
#include stdlib.h
#include string.h
#define LEN 1000
int queue[LEN], fir, end;
void printQueue()
{
int i = 0;
for(i = fir; i end; ++ i)
{
printf("%d ", queue[i]);
}
printf("\n");
}
void insertQueue()
{
int value = 0, i = 0;
printf("Enter the data which you want to insert to queue...\n");
scanf("%d", value);
queue[end ++] = value;
printQueue();
}
void deleteQueue()
{
printf("after delete the top data!\n");
fir ++;
printQueue();
}
void demo()
{
int Number = 0;
while(1)
{
printf("Enter the number:\n");
printf("1.insert...\n");
printf("2.delete...\n");
printf("3.exit!\n");
scanf("%d", Number);
if(Number 1 || Number 4) return;
switch(Number)
{
case 1: insertQueue(); break;
case 2: deleteQueue(); break;
case 3: exit(0);
default: return;
}
}
}
void creatQueue()
{
int i = 0;
fir = 0, end = 0;
for(i = 0; i LEN; ++ i)
{
queue[i] = 0;
}
}
int main()
{
creatQueue();
demo();
return 0;
}
当前名称:c语言建立队列函数 c语言队列的用法
网站URL:http://ybzwz.com/article/dogeeoh.html