c语言出队和入队函数 c语言循环队列入队出队代码

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

#include "stdafx.h"

创新互联公司是一家集成都网站制作、网站设计、网站页面设计、网站优化SEO优化为一体的专业的建站公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。

#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语言做队列的出对和入队

//定义队列结构体

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)

{

QueuePtr p;

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)

{

QueuePtr p;

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语言,用数组实现队列的入队,出队函数编程

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

#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语言版,出队入队及依次输出一个队列的操作。

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

代码错误说明如下:

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语言出队和入队函数 c语言循环队列入队出队代码
网页地址:http://myzitong.com/article/dopcige.html