c语言入队出队主函数 c语言队列入队

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

#include "stdafx.h"

10年积累的网站设计制作、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有万安免费网站建设让你可以放心的选择与我们合作。

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

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

#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://scjbc.cn/article/dopgjcp.html

其他资讯