Ⅰ 队列的源代码(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);
