链队列:用链表表示的队列称为链队列, 我们采用使用头节点的队列,并设置一个队头指针和队尾指针;队尾指针指向尾节点,当对头指针和队尾指针均指向头节点时为空队列;
链队列的定义:
// 链队列节点的定义;
typedef struct Node
{
int data;
struct Node *next //
}LinkQueueNode ;
// 链队列头节点定义;
typedef struct {
LinkQueueNode *front;
LinkQueue Node *rear ;
} LinkQueue;
operation
-
初始化链表
int InitQueue (LinkQueue *Q) // 队首头节点的出初化; { // 申请一个队空间使队首指针指向它; Q->front(LinkQueueNode*)sizeof(LinkQueueNode); if(Q->front!=NULL) { Q->rear=Q->front; // 队首队尾指向同一个空间,队列为空时; Q->front->next=NULL; return 1; } return 0; }
-
入队操作
int EnterQueue (LinkQueue *Q , int x) { LinkQueueNode *NweNode; //申请一个空间 NewNode =(LinkQueueNode*)malloc(sizeof(LinkQueueNode); //判断是否成功; if(NewNode!=NULL) { NewNode->data=x; NewNode->next=NULL; // 尾插法思想找到尾尾的下一个个接p p成为新的尾; Q->rear->next=NewNode ; Q->rear=NewNode; return 1; } else reuturn 0; }
-
出队;
int DeleteQueue(LinkQueue *Q , int x) { LinkQueueNode *p; //判断出队前是否为空 if(Q->front==Q->rear) return 0; else p=Q->front->next; //保存将要删除的节点; Q->front->next=p->next; //删除首元素,头节点指向首元数的下一个; if(Q->rear==p) //判断删除后是否为空; Q->rear=Q->front; // 为空时的关系; free(p); return 1; }
- *
- 队列满足先进先出的关系, 实现此关系由队首队尾两个指针的形式实现,
- 队的初始化 Q->rear=Q->front; 也是判断队列是否为空的方法, 子啊
- 删除前后均要判断是否为空队列,
删除前; Q->rear=Q->front;
删除后; Q->rear==p;
- 入队注意与链表的尾插法的关系;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。