资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言入队函数,队列入队函数

C语言用数组实现循环队列的入队出队

//定义一个int型数组que,长度为N(常量切大于2).

为衡阳等地区用户提供了全套网页设计制作服务,及衡阳网站建设行业解决方案。主营业务为网站建设、做网站、衡阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

int que[N];

int rear=0,front=0; //队尾 队头

判断队列已满:

if((front+1)%N==rear%N)  //成立则队列已满

判断队列为空

if((rear==front)) //成立则队列空

入队(一般在入队前判断队列是否已满)

//将val入队

que[front++]=val;

front%=N;

出队(一般在出队前判断队列是否为空)

rear=(rear+1)%N;

下一个要出队的元素(一般先判断是否为空)

que[rear];

C语言,用数组实现队列的入队,出队函数编程

这样的话应该符合你的要求:

#includestdio.h

void add(int queue[],int x);

int Top(int queue[]);

void del(int queue[]);

int end=0;

int main()

{

int n;

scanf("%d",n);//将要入队列n个元素

int queue[1000];

for(int i=1;i=n;i++)//输入n个元素

{

add(queue,i);//将i加入队列

}

//验证加入队列的元素,将队列中的元素按照输入的顺序输出:

for( i=1;i=n;i++)

{

printf("%d ",Top(queue));//Top函数返回队头元素

del(queue);//删除队头元素

}

//验证输出已经出队列后的队列(数组)元素:

printf("\n");

for(i=1;i=n;i++)

printf("%d ",queue[i]);

printf("\n");

return 0;

}

void add(int queue[],int x)

{

queue[++end]=x;

}

int Top(int queue[])

{

return queue[1];//注意,这里的函数始终return queue[1];这里是和将普通数组中的元素输出最大的不同之处。!!!!!!

}

void del(int queue[])

{

for(int i=2;i=end;i++)

{

queue[i-1]=queue[i];

}

queue=0;//将删除后的地方置0

end--;

}

求一个用c语言编写的入队、出队,。。谢谢

#include "stdafx.h"

#include "stdio.h"

#include "malloc.h"

#define MAX 8

static int Queen[8][8];

static int a=1;

typedef struct

{

int *elem;

int top;

}ColStack;//栈:存放每一行放置皇后的列号

void InitQueen()

{

int i,j;

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

{

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

{

Queen[i][j] = 0;

}

}

}

int InitStack(ColStack CS)//初始化栈

{

CS.elem = (int *)malloc(MAX*sizeof(int));

if(!CS.elem) return 0;

CS.top = -1;

return 1;

}

int Push(ColStack CS, int e)//进栈

{

if(CS.top = 8) return 0;

CS.top++;

CS.elem[CS.top] = e;

return 1;

}

int Pop(ColStack CS, int e)//退栈

{

if(CS.top == -1)return 0;

e = CS.elem[CS.top];

CS.top--;

return 1;

}

int Back(ColStack CS,int e)//回溯

{

Pop(CS,e);

Queen[CS.top+1][e] = 0;

if(e == 7 CS.top == -1)

{

return 0;

}

if(e == 7 CS.top != -1)

{

Back(CS,e);

}

return 1;

}

int OK(int i, int j)//检查(i,j)上能否放棋子

{

int k, m;

for(k = i; k = 0; k--)//检查同列

{

if(Queen[k][j] == 1) return 0;

}

k = i; m = j;

while(k = 0 m = 0)

{

if(Queen[k][m] == 1) return 0;

k--; m--;

}

k = i; m = j;

while(k = 0 m 8)

{

if(Queen[k][m] == 1) return 0;

k--;m++;

}

return 1;

}

//进入本函数时,在8*8棋盘前i-1行已放置了互不攻

// 击的i-1个棋子。现从第 i 行起继续为后续棋子选择

// 满足约束条件的位置。当求得(i8)的一个合法布局

// 时,输出之。

int queen(int i, ColStack CS, int start)

{

int j, k,e;

if(i=8)

{

printf("第%d种情况:\n",a);

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

{

for(k = 0; k 8; k++)

{

if(Queen[j][k] == 0)

{

printf("# ");

}

else

{

printf("@ ");

}

}

printf("\n");

}

a++;

}else

{

for(j = start+1; j 8; j++)

{

if(OK(i,j) == 1)

{

Queen[i][j]=1;

Push(CS,j);

queen(i+1,CS,-1);

return 1;

}

}

}

if(j == 8)

{

if(Back(CS,e) == 1)

{

queen(CS.top+1,CS,e);

}

if(Back(CS,e) == 0)

{

return 1;

}

}

}

int main()

{

InitQueen();

ColStack cs;

InitStack(cs);

queen(0,cs,-1);

return 0;

}

这是一个八皇后问题,是个典型的出队列、入队列问题

如何才能C语言编程实现出队与入队?急!!!

#include assert.h

#include iostream.h

#ifndef POINTQUEUE

#define POINTQUEUE

template class Type class Queue; //前视声明

template class Type

class QueueNode

{

friend class QueueType;

private:

Type data; //队列结点数据

QueueNodeType *link; //结点链指针

QueueNode(Type d=0,QueueNode *l=NULL):data(d),link(l){};

};

template class Type

class Queue

{

public:

Queue():rear(NULL),front(NULL),length(0){};

~Queue();

void EnQueue(const Type item);

Type DeQueue();

Type GetFront();

void MakeEmpty(){ Distroy();front=rear=NULL; }

int Length(){ return length;}

bool IsEmpty()const { return front==NULL; }

private:

QueueNodeType *front, *rear; //队列指针

int length;

void Distroy();

};

template class Type

QueueType::~Queue() //队列的析构函数

{

Distroy();

}

template class Type

void QueueType::EnQueue(const Type item) //将新元素item插入到队列的队尾

{

length++;

if(front==NULL)

front=rear=new QueueNodeType(item,NULL);

else

rear=rear-link=new QueueNodeType(item,NULL);

}

template class Type

Type QueueType::DeQueue() //删去队头结点,并返回队头元素的值

{

assert(!IsEmpty()); //判队空的断言

length--;

QueueNodeType *p = front;

Type retvalue=p-data; //保存队头的值

front=front-link; //新队头

delete p;

return retvalue;

}

template class Type

Type QueueType::GetFront() //若队不空,则函数返回队头元素的值

{

assert(!IsEmpty());

return front-data;

}

template class Type

void QueueType::Distroy()

{

QueueNodeType *p;

while(front!=NULL) //逐个结点释放

{

p=front;

front=front-link;

delete p;

}

}

#endif

#include "pointqueue.h"

int main()

{

// Queueint qu(10);

Queueint qu;

int i;

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

qu.EnQueue(i*10-3);

coutqu.Length()endl;

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

coutqu.DeQueue()' ';

return 1;

}

数据结构c语言版,出队入队及依次输出一个队列的操作。

黑色的提示框是程序运行结果窗口,不是错误的窗口

代码错误说明如下:

while(Q-front!=Q-rear)//在本循环体之中,Q-front Q-rear的值始终没有变化

//故而在这里肯定是一个死循环

{

printf("%d,  ", Q-front-next-data);

Q-front-next=Q-front-next-next;

}

//改正后的代码如下:

QNode* s = Q-front;

while(s!=Q-rear)

{

printf("%d,  ", s-data);

s=s-next;

}

另外,所有的函数当中不应该有exit

exit是一个系统函数,表示结束程序,而不是退出函数

如果需要退出函数可以使用return来达到该目的

c语言入栈出栈,出队入队问题

int pop(seqstack *s,char *x) {

if(s-top == 0) { // 初始化时,s-top = -1,此处以s-top == 0 判断栈为空,有矛盾

printf("栈空\n");

return -1;

}

else {

*x = s-c[s-top];

s-top--;

}

return 1;

}

通常,top指的位置是待压入的空结点,所以top == 0时,栈为空,top == MAXSIZE时,栈满,故应该修改初始化函数,建议蟹盖如下:

seqstack *Initstack(void) {

seqstack *s;

s = (seqstack *)malloc(sizeof(seqstack));

s-top = 0;

return s;

}


标题名称:c语言入队函数,队列入队函数
网站地址:http://cdkjz.cn/article/dsehgeo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220