快速业务通道

冒号和他的学生们(连载23)——数据抽象 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
newIndex < q->count; ++newIndex) /**//* 复制到新数组 */    {      data[newIndex] = q->data[oldIndex];      oldIndex = (oldIndex + 1) % oldSize;    }    free(q->data);    q->data = data;    q->first = 0;    q->last = oldSize - 1;    q->size = newSize;    return 0; } int queue_add(Queue q, ItemType item) {    if (q->count >= q->size) /**//* 超出容量后自动扩容 */    {      if (queue_resize(q) < 0) return -1;  /**//* 内存不足 */    }    q->last = (q->last + 1) % q->size;    q->data[q->last] = item;      ++q->count;    return 0; } int queue_remove(Queue q, ItemType* item) {    if (q->count <= 0) return -1;    *item = q->data[q->first];    q->first = (q->first + 1) % q->size;    --q->count;    return 0; } int queue_head(Queue q, ItemType* item) {    if (q->count <= 0) return -1;    *item = q->data[q->first];    return 0; }

冒号和他的学生们(连载23)——数据抽象(3)

时间:2011-07-03 BlogJava 郑晖

“由于函数queue_resize并非公共接口,因此前面加上static,以避免被外部调用。与Java中的涵义不同,C中static函数表示文件内部函数。作为对比,我们再看看队列的链表实现。”冒号说罢投影出另两段代码——

/* 队列类型定义*/

typedef struct NodeType {    ItemType item;         /**//* 队列成员数据 */    struct NodeType* next; } NodeType; typedef NodeType* Node; typedef struct {    Node head;           /**//* 队首 */    Node tail;            /**//* 队尾 */    int count;            /**//* 队列长度 */ } QueueType;

/* 文件QueueImpl.c:队列的链表(linked list)实现 */

int queue_initialize(Queue q) {    q->head = NULL;    q->tail = NULL;    q->count = 0;    return 0; } void queue_finalize(Queue q) {    ItemType item;    while (queue_remove(q, &item) >= 0)      ; } int queue_empty(Queue q) {    return q->count <= 0; } int queue_length(Queue q) {    return q->count; } int queue_add(Queue q, ItemType item) {    Node node = (Node)malloc(sizeof(NodeType));    if (node == NULL) return -1; /**//* 内存不足 */    node->item = item;    node->next = NULL;    if (q->tail)    {      q->tail->next = node;      q->tail = node;    }    else    {      q->head = q->tail = node;    }    ++q->count;    return 0; } int queue_remove(Queue q, ItemType* item) {    Node oldHead = q->head;    if (q->count <= 0) return -1;    *item = oldHead->item;    q->head = oldHead->next;    free(oldHead);    if (--q->count == 0)    {      q->tail = NULL;    }    return 0; } int queue_head(Queue q, ItemType* item) {    if (q->count <= 0) return -1;    *item = q->head->item;    return 0; }

冒号和他的学生们(连载23)——数据抽象(4)

时间:2011-07-03 BlogJava 郑晖

叹号发现:“两种实现方式看起来迥然不同啊。&r

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号