當前位置:首頁 » 編程語言 » c語言隊列源碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言隊列源碼

發布時間: 2023-06-26 04:37:40

Ⅰ 隊列的源代碼(c語言

以前寫的.你可以看看咯..

class Queue
{
struct Node
{
int a;
Node * next;
};
public:
Queue();
void pump(int b);
void pop();
int getlength();
virtual void print();

private:
Node * head;
Node * rear;
};

void Queue::pump(int b)
{
Node *p1=new Node;
p1->a=b;
p1->next=NULL;
rear->next=p1;
rear=p1;
head->a++;
cout<<setw(2)<<b<<setw(2)<<" 進入隊列 "<<endl;
}
void Queue::pop()
{
Node *p;
p=head->next;
cout<<" "<<setw(2)<<p->a<<setw(2)<<"出隊"<<endl;
head->next=p->next;
delete p;
head->a--;
}
int Queue::getlength()
{
return head->a;
}
void Queue::print()
{
Node *p;
p=head->next;
cout<<"隊列中的元素是:"<<endl;
while(p)
{
cout<<p->a<<" -> ";
p=p->next;
}
cout<<"NULL"<<endl;
}

Queue::Queue()
{
rear=head;

};

Ⅱ 用c語言進行鏈式隊列的創建,編譯鏈接沒錯,但是運行的時候程序被終止。以下是源代碼和注釋

自行比對這兩個函數吧

voidinsert_link(structlinkqueue*ps,intval)//完成隊列的增加。
{
structnode*pnew=(structnode*)malloc(sizeof(structnode));//申請一個節點
pnew->data=val;//將要放入隊列的值賦給節點的數據域
pnew->next=NULL;
//pnew=ps->rear->next;//將rear指向新的節點,並將新的節點的指針域置空。
ps->rear->next=pnew;
ps->rear=ps->rear->next;
//pnew->next=NULL;
}
voidtraverse_link(structlinkqueue*ps)//完成隊列遍歷
{
structnode*p=ps->front->next;//申請一個臨時指針變數,以完成隊列遍歷。因為頭節點沒有存放數據所以讓指針指向front下一個節點
while(/*p->next*/p!=NULL){//當指針指向的節點的指針域不為空時就繼續下移,並且輸出本節點的數據
printf("%d",p->data);
p=p->next;
}
}

Ⅲ 請大家幫忙用c語言編個隊列的源程序

#include <stdio.h>
#include <stdlib.h>
typedef struct QNode{
int data;
struct QNode *next;
} LinkNode;//每個結點的定義

typedef struct{
LinkNode *front, *rear;
}LinkQuene;//採用鏈表結構的隊列

void InitQuene(LinkQuene &Q)//帶有頭結點的隊列
{
Q.front=(LinkNode *)malloc(sizeof(QNode));
Q.rear=Q.front;
}

bool EmptyQuene(LinkQuene Q)
{
if(Q.front==Q.rear)
return true;
else
return false;
}

void QueneTraverse(LinkQuene Q)
{
if(EmptyQuene(Q)==false)
{
LinkNode *p=Q.front->next;
printf("\n當前隊列的遍歷序列為:");
while(p!=Q.rear)
{
printf("%d->",p->data);
p=p->next;
}
printf("%d\n",p->data);
}
}

void EnQuene(LinkQuene &Q, int e)
{
LinkNode *p=(LinkNode *)malloc(sizeof(QNode));
if(!p)
exit(0);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}

void DeQuene(LinkQuene &Q, int &e)
{
LinkNode *p;
if(EmptyQuene(Q))
{ printf("隊列為空!\n");
exit(0);
}

p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
}

void menu()
{
printf("\n***************************\n");
printf("**[1]新建隊列 **\n");
printf("**[2]入隊列 **\n");
printf("**[3]出隊列 **\n");
printf("**[4]遍歷整個隊列 **\n");
printf("**[0]退出 **\n");
printf("***************************\n");
printf("請輸入命令:\n");
}
void main()
{
LinkQuene Q;
InitQuene(Q);
int a,order;
char ans,temp;
while(1)
{
menu();
ans='n';
scanf("%d",&order);
switch(order)
{
case 1:
do{
printf("請輸入隊列的元素:\n");
scanf("%d",&a);
fflush(stdin); //清空鍵盤緩沖區(過濾回車)
EnQuene(Q,a);
printf("是否繼續添加元素?(Y/N)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y' || ans =='Y');
QueneTraverse(Q);
break;
case 2:
if( EmptyQuene(Q))
{
printf("隊列為空!\n");
break;
}
do{
printf("請輸入添加到隊列的元素:\n");
scanf("%d",&a);
fflush(stdin);
EnQuene(Q,a);
printf("是否繼續添加元素?(Y/N)");
scanf("%c",&ans);
fflush(stdin);
}while(ans=='y' || ans =='y');
QueneTraverse(Q);
break;

case 3:
if(EmptyQuene(Q))
{
printf("隊列為空!\n");
break;
}
else{
do{
DeQuene(Q,a);
fflush(stdin);
printf("元素%d已經出隊列\n",a);
if(EmptyQuene(Q)==false)
{
printf("是否繼續出隊列?(Y/N)");
scanf("%c",&ans);
}
else
{
printf("隊列已空!\n");
break;
}
}while(ans=='y' || ans =='y');
QueneTraverse(Q);
break;
}
case 4:
if(EmptyQuene(Q))
{
printf("隊列為空!\n");
break;
}
QueneTraverse(Q);break;
case 0:
exit(0);
default:
printf("您輸入的命令有誤!\n");

}
}
}

Ⅳ 用C語言編寫隊列程序

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define NULL 0
#define OK 1
#define OVERFLOW 0
#define ERROR 0
typedef int QElemType;
typedef int Status;
typedef struct QNode
{
QElemType data;
QNode *next;
}*QueuePtr;
struct LinkQueue
{
QueuePtr front,rear;//隊頭,隊尾指針
};
//函數列表
void InitQueue(LinkQueue &Q)
{//初始化一個隊列
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)//生成頭結點失敗
exit(OVERFLOW);
Q.front->next=NULL;
}
void DestoryQueue(LinkQueue &Q)
{ //銷毀隊列
while(Q.front)
{
Q.rear=Q.front->next;//Q.rear指向Q.front的下一個結點
free(Q.front);//釋放Q.front所指結點
Q.front=Q.rear;//Q.front指向Q.front的下一個結點
}
}
void ClearQueue(LinkQueue &Q)
{ //將隊列清為空
DestoryQueue(Q);//銷毀隊列
InitQueue(Q);//重新構造隊列
}
Status QueueEmpty(LinkQueue Q)
{ //判斷隊列是否為空
if(Q.front->next==NULL)
return TRUE;
else return FALSE;
}
int QueueLength(LinkQueue Q)
{ //求隊列的長度
int i=0;//計數器清0
QueuePtr p=Q.front;//p指向結點
while(Q.rear!=p)//p所指向的不是尾結點
{
i++;//計數器加1
p=p->next;
}
return i;
}
Status GetHead(LinkQueue Q,QElemType &e)
{ //若隊列不空,則用e返回隊頭元素
QueuePtr p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;//p指向隊頭結點
e=p->data;//將隊頭元素的值賦給e
return OK;
}
void EnQueue(LinkQueue &Q,QElemType e)
{ //插入元素e為隊列Q的新的隊尾元素
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
//動態生成新結點
if(!p)
exit(OVERFLOW);
p->data=e;//將e的值賦給新結點
p->next=NULL;//新結點的指針為空
Q.rear->next=p;//原隊尾結點的指針域為指向新結點
Q.rear=p;//尾指針指向新結點
}
Status DeQueue(LinkQueue &Q,QElemType &e)
{ //若隊列不為空,刪除Q的隊頭元素,用e返回其值
QueuePtr p;
if(Q.front==Q.rear)//隊列為空
return ERROR;
p=Q.front->next;//p指向隊頭結點
e=p->data;//隊頭元素賦給e
Q.front->next=p->next;//頭結點指向下一個結點
if(Q.rear==p)//如果刪除的隊尾結點
Q.rear=Q.front;//修改隊尾指針指向頭結點
free(p);
return OK;
}
void QueueTraverse(LinkQueue Q,void(*visit)(QElemType))
{ //對隊頭到隊尾依次對隊列中每個元素調用函數visit()
QueuePtr p;
p=Q.front->next;
while(p)
{
visit(p->data);//對p所指元素調用visit()
p=p->next;
}
printf("\n");
}
void print(QElemType e)
{
printf("%2d",e);
}
void main()
{
int i,k;
QElemType d;
LinkQueue q;
InitQueue(q);//構造一個空棧
for(i=1;i<=5;i++)
{
EnQueue(q,i);
}
printf("棧的元素為:");
QueueTraverse(q,print);
k=QueueEmpty(q);
printf("判斷棧是否為空,k=%d(1:為空9;0:不為空)\n",k);
printf("將隊頭元素賦給d\n");
k=GetHead(q,d);
printf("隊頭元素為d=%d\n",d);
printf("刪除隊頭元素:\n");
DeQueue(q,d);
k=GetHead(q,d);
printf("刪除後新的隊頭元素為d=%d\n",d);
printf("此時隊列的長度為%d\n",QueueLength(q));
ClearQueue(q);//清空隊列
printf("清空隊列後q.front=%u,q.rear=%u,q.front->next=%u\n",q.front,q.rear,q.front->next);
DestoryQueue(q);
printf("銷毀隊列後,q.front=%u,q.rear=%u\n",q.front,q.rear);