#include?stdio.h
成都創(chuàng)新互聯(lián)公司專注于汪清企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),成都做商城網(wǎng)站。汪清網(wǎng)站建設(shè)公司,為汪清等地區(qū)提供建站服務(wù)。全流程按需定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
#include?stdlib.h
#define?ElemType?int?
#define?Status?int
#define?OK?1
#define?ERROR?0
typedef?struct?QNode{
ElemType?data;
struct?QNode?*next;
}QNode;
typedef?struct?LinkQueue{
QNode?*front;
QNode?*rear;
}LinkQueue;
Status?InitQueue(LinkQueue?*q)?{?//建立隊(duì)列?
q-front=q-rear=(QNode?*)malloc(sizeof(QNode));
if(!q-front)
return?ERROR;
q-front-next=NULL;
return?OK;
}
Status?EnQueue(LinkQueue?*q,ElemType?e)?{?//入隊(duì)?
QNode?*p=(QNode?*)malloc(sizeof(QNode));
if(!p)
return?ERROR;
p-data=e;
p-next=NULL;
q-rear-next=p;?//入隊(duì)操作,從隊(duì)尾(rear)進(jìn)入
q-rear=p;
return?OK;
}
Status?DeQueue(LinkQueue?*q,ElemType?*e)?{?//出隊(duì)?
QNode?*p=(QNode?*)malloc(sizeof(QNode));
if(!p)
return?ERROR;
p=q-front-next;?//q指向的是front指針的下一個(gè)位置,亦即隊(duì)首元素?
*e=p-data;
q-front-next=p-next;?//出隊(duì)操作后,front++
if(q-rear==p)?//判斷是否全部出隊(duì)
q-rear=q-front;?//如果全部出隊(duì),則將隊(duì)列置為空
return?OK;
}
Status?PrintfQueue(LinkQueue?*Q)?{
QNode?*p;
for(p=Q-front-next;p!=NULL;p=p-next)
printf("%d\t",p-data);
}
int?main(void)
{
int?i,n;
ElemType?e,de;
LinkQueue?*q=(LinkQueue?*)malloc(sizeof(QNode));
if(!q)
return?ERROR;
InitQueue(q);
printf("以下開(kāi)始構(gòu)造初始隊(duì)列:\n\n");
printf("請(qǐng)輸入元素個(gè)數(shù):");
scanf("%d",n);
printf("\n");
for(i=0;in;++i)?{
printf("請(qǐng)輸入第%d個(gè)元素:",i+1);
scanf("%d",e);
EnQueue(q,e);
}
printf("\n");
printf?("初始隊(duì)列構(gòu)造完畢!\n\n");
printf?("初始隊(duì)列:\n");
PrintfQueue(q);
printf("\n\n");
printf?("======================================================\n\n");
printf("以下開(kāi)始執(zhí)行入隊(duì)操作:\n\n");
printf("請(qǐng)輸入需入隊(duì)的元素個(gè)數(shù):");
scanf("%d",n);
printf("\n");
for(i=0;in;++i)?{
printf("請(qǐng)輸入第%d個(gè)元素:",i+1);
scanf("%d",e);
EnQueue(q,e);
}
printf("\n");
printf?("入隊(duì)%d個(gè)元素操作完畢!\n\n",n);
printf("此時(shí)隊(duì)列:\n");
PrintfQueue(q);
printf("\n\n");
printf?("======================================================\n\n");
printf("以下開(kāi)始執(zhí)行出隊(duì)操作:\n\n");
printf("請(qǐng)輸入需出隊(duì)的元素個(gè)數(shù):");
scanf("%d",n);
printf("\n");
for(i=0;in;++i)
DeQueue(q,de);
printf("\n");
printf?("出隊(duì)%d個(gè)元素操作完畢!\n\n",n);
printf("此時(shí)隊(duì)列:\n");
PrintfQueue(q);
printf("\n\n");
printf?("======================================================\n\n");
free(q);
return?0;
}
執(zhí)行結(jié)果
//定義一個(gè)int型數(shù)組que,長(zhǎng)度為N(常量切大于2).
int?que[N];
int?rear=0,front=0;?//隊(duì)尾?隊(duì)頭
判斷隊(duì)列已滿:
if((front+1)%N==rear%N)??//成立則隊(duì)列已滿
判斷隊(duì)列為空
if((rear==front))?//成立則隊(duì)列空
入隊(duì)(一般在入隊(duì)前判斷隊(duì)列是否已滿)
//將val入隊(duì)
que[front++]=val;
front%=N;
出隊(duì)(一般在出隊(duì)前判斷隊(duì)列是否為空)
rear=(rear+1)%N;
下一個(gè)要出隊(duì)的元素(一般先判斷是否為空)
que[rear];
int?pop(seqstack?*s,char?*x)?{
if(s-top?==?0)?{?//?初始化時(shí),s-top?=?-1,此處以s-top?==?0?判斷棧為空,有矛盾
printf("??誠(chéng)n");
return?-1;
}
else?{
*x?=?s-c[s-top];
s-top--;
}
return?1;
}
通常,top指的位置是待壓入的空結(jié)點(diǎn),所以top == 0時(shí),棧為空,top ==?MAXSIZE時(shí),棧滿,故應(yīng)該修改初始化函數(shù),建議蟹蓋如下:
seqstack?*Initstack(void)?{
seqstack?*s;
s?=?(seqstack?*)malloc(sizeof(seqstack));
s-top?=?0;
return?s;
}
#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;//棧:存放每一行放置皇后的列號(hào)
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)//進(jìn)棧
{
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;
}
//進(jìn)入本函數(shù)時(shí),在8*8棋盤前i-1行已放置了互不攻
// 擊的i-1個(gè)棋子?,F(xiàn)從第 i 行起繼續(xù)為后續(xù)棋子選擇
// 滿足約束條件的位置。當(dāng)求得(i8)的一個(gè)合法布局
// 時(shí),輸出之。
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;
}
這是一個(gè)八皇后問(wèn)題,是個(gè)典型的出隊(duì)列、入隊(duì)列問(wèn)題
入隊(duì)操作
功能:將元素 x 插入到Q的隊(duì)尾。
算法:Status EnQueue(SqQueue Q, QElemType e) {
if ((Q.rear+1) % MaxQsize == Q.front) return ERROR; // 隊(duì)列滿
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1) % MaxQsize;
return OK;
}
出隊(duì)操作
功能:刪除Q的隊(duì)頭元素,并返回其值。
算法: Status DeQueue(SqQueue Q, QElemType e) {
if (Q.front == Q. rear) return ERROR; // 隊(duì)列空
e = Q.base[Q.front];
Q.front=(Q.front+1) % MaxQsize;
return OK;
}
這樣的話應(yīng)該符合你的要求:
#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);//將要入隊(duì)列n個(gè)元素
int?queue[1000];
for(int?i=1;i=n;i++)//輸入n個(gè)元素
{
add(queue,i);//將i加入隊(duì)列
}
//驗(yàn)證加入隊(duì)列的元素,將隊(duì)列中的元素按照輸入的順序輸出:
for(?i=1;i=n;i++)
{
printf("%d?",Top(queue));//Top函數(shù)返回隊(duì)頭元素
del(queue);//刪除隊(duì)頭元素
}
//驗(yàn)證輸出已經(jīng)出隊(duì)列后的隊(duì)列(數(shù)組)元素:
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];//注意,這里的函數(shù)始終return?queue[1];這里是和將普通數(shù)組中的元素輸出最大的不同之處。?。。。。。?/p>
}
void?del(int?queue[])
{
for(int?i=2;i=end;i++)
{
queue[i-1]=queue[i];
}
queue=0;//將刪除后的地方置0
end--;
}