设为首页 加入收藏

TOP

数据结构-队列的链式实现
2015-07-24 10:20:56 来源: 作者: 【 】 浏览:0
Tags:数据结构 队列 链式 实现

队列的链式实现

1 队列的链式存储表示
队列的链式存储结构简称为链队列,它是限制在表头进行删除操作和表尾进行插入操作的单链表。
需要两类不同的结点:数据元素结点,队列的队首指针和队尾指针的结点
指针结点类型定义:

typedef struct link_queue
{   QNode  *front ,  *rear ;
}LinkQueue ;

2 链队运算及指针变化
链队的操作实际上是单链表的操作,只不过是删除在表头进行,插入在表尾进行。插入、删除时分别修改不同的指针

3 链队列的基本操作 ⑴ 链队列的初始化 Status Init_LinkQueue(LinkQueue *Q ) { /*成功返回OK,否则返回ERROR*/ QNode *p ; p=(QNode *)malloc(sizeof(QNode)) ; /* 开辟头结点 */ if(p==NULL) return ERROR; p->next=NULL ; Q->front=Q->rear=p ; return OK; } 
⑵ 链队列的入队操作 在已知队列的队尾插入一个元素e ,即修改队尾指针(Q.rear)。 Status Insert_LinkQueue(LinkQueue *Q , ElemType e) /* 将数据元素e插入到链队列Q的队尾 */ { QNode *p ; p=(QNode *)malloc(sizeof(QNode)) ; if (!p) return ERROR; /* 申请新结点失败,返回错误标志 */ p->data=e ; p->next=NULL ; /* 形成新结点 */ Q->rear->next=p ; Q->rear=p ; /* 新结点插入到队尾 */ return OK; } 
链队列的出队操作 Status Delete_LinkQueue(LinkQueue *Q, ElemType *x) { QNode *p ; if (Q->front==Q->rear) return ERROR ; /* 队空 */ p=Q->front->next ; /* 取队首结点 */ *x=p->data ; Q->front->next=p->next ; /* 修改队首指针 */ if (p==Q->rear) Q->rear=Q->front ; /* 当队列只有一个结点时应防止丢失队尾指针 */ free(p) ; return OK ; } 
⑷ 链队列的撤消 void Destroy_LinkQueue(LinkQueue *Q ) /* 将链队列Q的队首元素出队 */ { while (Q->front!=NULL) {Q-> rear= Q-> front->next; /* 令尾指针指向队列的第一个结点 */ free(Q-> front); /* 每次释放一个结点 */ /* 第一次是头结点,以后是元素结点 */ Q-> front= Q-> rear; } } 
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据结构-栈的链式存储 下一篇数据结构-队列静态顺序存储结构

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C 内存管理 | 菜鸟教 (2025-12-26 20:20:37)
·如何在 C 语言函数中 (2025-12-26 20:20:34)
·国际音标 [ç] (2025-12-26 20:20:31)
·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)