恩,顺便说一下队列吧,队列与栈相比,是一种先进先出的数据结构,类似一头进一头出的数据结构,允许插入的队尾,删除元素叫出队,出队一般在队头实现,一般对操作系统中的处理消息的消息队列,就是对队列的典型操作,一个消息接一个消息就尽心排队,处理时出队,触发时入队,ok ,下面我将对队列进行定义
首先是单链表形成的队列
typedef struct Qnode{
datatype data;
struct Qnode *next;
}Qnode,*QueuePtr;//对每个队列的节点定义
typedef struct{
QueuePtr front;//队头指针
QueuePtr rear;//队尾指针
}LinkQueue;//队列
下面将介绍对队列的操作,首先是初始化队列
void InitQueue(LinkQueue &q){
q.front=(QueuePtr)malloc(sizeof(QueuePtr));
if(!q.front)
exit(0);
q.rear=q.front;
q.front->next=NULL;
}//initialize a queue
下面分别是插入一个删除一个队列,入队,出队函数
void DestoryQueue(LinkQueue &q){
while(q.front){
q.rear=q.front->next;
free(q.front);
q.front=q.rear;
}
}//destory a queue
void insertQueue(LinkQueue &q,datatype e){
QueuePtr p=(QueuePtr)malloc(sizeof(QueuePtr));
if(!p)
exit(0);
p->data=e;
p->next=NULL;
q.rear->next=p;
q.rear=p;
}//insert a element to the rear of the queue
datatype deleteElementOfQueue(LinkQueue &q){
if(q.front==q.rear)
exit(0);
QueuePtr p=q.front->next;
datatype e=p->data;
q.front->next=p->next;
if(q.rear==p)
q.rear=q.front;
free(p);
}//delete an element of the queue
这些就是完成一个单链对联完成的操作,呵呵,经供参考...
在队列中还有一个常用的循环队列,我将在下篇中继续复习,呵呵现在麽。。我要自习去了...