編程實現出隊
這樣的話應該符合你的要求:
#include<stdio.h>
voidadd(intqueue[],intx);
intTop(intqueue[]);
voiddel(intqueue[]);
intend=0;
intmain()
{
intn;
scanf("%d",&n);//將要入隊列n個元素
intqueue[1000];
for(inti=1;i<=n;i++)//輸入n個元素
{
add(queue,i);//將i加入隊列
}
//驗證加入隊列的元素,將隊列中的元素按照輸入的順序輸出:
for(i=1;i<=n;i++)
{
printf("%d",Top(queue));//Top函數返回隊頭元素
del(queue);//刪除隊頭元素
}
//驗證輸出已經出隊列後的隊列(數組)元素:
printf(" ");
for(i=1;i<=n;i++)
printf("%d",queue[i]);
printf(" ");
return0;
}
voidadd(intqueue[],intx)
{
queue[++end]=x;
}
intTop(intqueue[])
{
returnqueue[1];//注意,這里的函數始終returnqueue[1];這里是和將普通數組中的元素輸出最大的不同之處。!!!!!!
}
voiddel(intqueue[])
{
for(inti=2;i<=end;i++)
{
queue[i-1]=queue[i];
}
queue[end]=0;//將刪除後的地方置0
end--;
}
2. 試寫出循環隊列出隊、入隊的演算法(用C語言給出主要部分即可)
#define Max 300
typedef struct
{
int tail,head;
int a[Max];
}queue;
void enqueue(int key,queue&q)
{
q.a[q.tail]=key;
q.tail=(q.tail+1)%Max;
}
int dequeue(queue&q)
{
int key;
key=q.a[q.head];
q.head=(q.head+1)%Max;
return key;
}
用了c++引用。。。。。。沒有入隊前的判斷是否滿了以及出隊前判斷是否為空,這個你應該懂的
3. 在循環隊列中怎樣實現入隊和出隊操作 數據結構 C語言
入隊操作
功能:將元素 x 插入到Q的隊尾。
演算法:Status EnQueue(SqQueue &Q, QElemType e) {
if ((Q.rear+1) % MaxQsize == Q.front) return ERROR; // 隊列滿
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1) % MaxQsize;
return OK;
}
出隊操作
功能:刪除Q的隊頭元素,並返回其值。
演算法: Status DeQueue(SqQueue &Q, QElemType &e) {
if (Q.front == Q. rear) return ERROR; // 隊列空
e = Q.base[Q.front];
Q.front=(Q.front+1) % MaxQsize;
return OK;
}
4. c語言實現出隊入隊,輸入0表示出隊,輸入-1表示程序結束,其餘整數表示入隊,隊列空或滿,操作錯誤
#include<stdio.h>
#include<string.h>
#include<windows.h>
#defineMAX_STACK100
voidmain()
{
charchstr[100];
charstack[MAX_STACK];
intcur_pos=-1;
while(1)
{
system("cls");
printf("-----------------------隊列操作------------------------- ");
printf("***0:POP***-1:GAMEOVER***1-9:PUSH ");
printf("Example: ");
printf("0[ENTER]-1[ENTER]1abcd[ENTER]或者2abcd[ENTER] ");
fflush(stdin);
gets(chstr);
if(chstr[0]=='-'&&chstr[1]=='1'&&strlen(chstr)==2)
break;
elseif(chstr[0]=='0'&&strlen(chstr)==1)
{
if(cur_pos==-1)
{
printf("%%error:stackempty,cannotpop! ");
continue;
}
cur_pos--;
printf("pop[%c]out ",stack[cur_pos+1]);
}
elseif(chstr[0]>='1'&&chstr[0]<='9')
{
intp=1;
while(chstr[p]!=0&&cur_pos<MAX_STACK)
{
cur_pos++;
stack[cur_pos]=chstr[p++];
printf("push[%c]in ",chstr[p-1]);
if(cur_pos==MAX_STACK-1&&chstr[p]!=0)
{
printf("%%error:cannnotpush[%c]:stackfull ",chstr[p]);
break;
}
}
}
else
printf("%%error:Unknowoperation! ");
}
}
5. 如何才能C語言編程實現出隊與入隊急!!!
#include <assert.h>
#include <iostream.h>
#ifndef POINTQUEUE
#define POINTQUEUE
template <class Type> class Queue; //前視聲明
template <class Type>
class QueueNode
{
friend class Queue<Type>;
private:
Type data; //隊列結點數據
QueueNode<Type> *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:
QueueNode<Type> *front, *rear; //隊列指針
int length;
void Distroy();
};
template <class Type>
Queue<Type>::~Queue() //隊列的析構函數
{
Distroy();
}
template <class Type>
void Queue<Type>::EnQueue(const Type &item) //將新元素item插入到隊列的隊尾
{
length++;
if(front==NULL)
front=rear=new QueueNode<Type>(item,NULL);
else
rear=rear->link=new QueueNode<Type>(item,NULL);
}
template <class Type>
Type Queue<Type>::DeQueue() //刪去隊頭結點,並返回隊頭元素的值
{
assert(!IsEmpty()); //判隊空的斷言
length--;
QueueNode<Type> *p = front;
Type retvalue=p->data; //保存隊頭的值
front=front->link; //新隊頭
delete p;
return retvalue;
}
template <class Type>
Type Queue<Type>::GetFront() //若隊不空,則函數返回隊頭元素的值
{
assert(!IsEmpty());
return front->data;
}
template <class Type>
void Queue<Type>::Distroy()
{
QueueNode<Type> *p;
while(front!=NULL) //逐個結點釋放
{
p=front;
front=front->link;
delete p;
}
}
#endif
#include "pointqueue.h"
int main()
{
// Queue<int> qu(10);
Queue<int> qu;
int i;
for(i=0;i<10;i++)
qu.EnQueue(i*10-3);
cout<<qu.Length()<<endl;
for(i=0;i<10;i++)
cout<<qu.DeQueue()<<' ';
return 1;
}
6. 數據結構c語言版,出隊入隊及依次輸出一個隊列的操作。
#include<stdio.h>
#include<stdlib.h>
#defineElemTypeint
#defineStatusint
#defineOK1
#defineERROR0
typedefstructQNode{
ElemTypedata;
structQNode*next;
}QNode;
typedefstructLinkQueue{
QNode*front;
QNode*rear;
}LinkQueue;
StatusInitQueue(LinkQueue*q){//建立隊列
q->front=q->rear=(QNode*)malloc(sizeof(QNode));
if(!q->front)
returnERROR;
q->front->next=NULL;
returnOK;
}
StatusEnQueue(LinkQueue*q,ElemTypee){//入隊
QNode*p=(QNode*)malloc(sizeof(QNode));
if(!p)
returnERROR;
p->data=e;
p->next=NULL;
q->rear->next=p;//入隊操作,從隊尾(rear)進入
q->rear=p;
returnOK;
}
StatusDeQueue(LinkQueue*q,ElemType*e){//出隊
QNode*p=(QNode*)malloc(sizeof(QNode));
if(!p)
returnERROR;
p=q->front->next;//q指向的是front指針的下一個位置,亦即隊首元素
*e=p->data;
q->front->next=p->next;//出隊操作後,front++
if(q->rear==p)//判斷是否全部出隊
q->rear=q->front;//如果全部出隊,則將隊列置為空
returnOK;
}
StatusPrintfQueue(LinkQueue*Q){
QNode*p;
for(p=Q->front->next;p!=NULL;p=p->next)
printf("%d ",p->data);
}
intmain(void)
{
inti,n;
ElemTypee,de;
LinkQueue*q=(LinkQueue*)malloc(sizeof(QNode));
if(!q)
returnERROR;
InitQueue(q);
printf("以下開始構造初始隊列: ");
printf("請輸入元素個數:");
scanf("%d",&n);
printf(" ");
for(i=0;i<n;++i){
printf("請輸入第%d個元素:",i+1);
scanf("%d",&e);
EnQueue(q,e);
}
printf(" ");
printf("初始隊列構造完畢! ");
printf("初始隊列: ");
PrintfQueue(q);
printf(" ");
printf("====================================================== ");
printf("以下開始執行入隊操作: ");
printf("請輸入需入隊的元素個數:");
scanf("%d",&n);
printf(" ");
for(i=0;i<n;++i){
printf("請輸入第%d個元素:",i+1);
scanf("%d",&e);
EnQueue(q,e);
}
printf(" ");
printf("入隊%d個元素操作完畢! ",n);
printf("此時隊列: ");
PrintfQueue(q);
printf(" ");
printf("====================================================== ");
printf("以下開始執行出隊操作: ");
printf("請輸入需出隊的元素個數:");
scanf("%d",&n);
printf(" ");
for(i=0;i<n;++i)
DeQueue(q,&de);
printf(" ");
printf("出隊%d個元素操作完畢! ",n);
printf("此時隊列: ");
PrintfQueue(q);
printf(" ");
printf("====================================================== ");
free(q);
return0;
}
執行結果
7. 用c語言編寫12345的入隊,然後出隊
#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 行起繼續為後續棋子選擇
// 滿足約束條件的位置。當求得(i>8)的一個合法布局
// 時,輸出之。
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;
}
這是一個八皇後問題,是個典型的出隊列、入隊列問題