码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构 -- 可重用模块的借口设计模板

时间:2015-04-10 23:53:56      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

以下以链表为例子,仔细体会代码模块化设计的思想以及代码规范。

/***************************************************
*    Coperight (C) SSE-USTC, 2014-2015
*    FILE NAME              :  linktable.h
*    PRINCIPAL AUTHOR       :  Su YongSheng
*    SUBSYSTEM NAME         :  LinkTable
*    MODULE NAME            :  LinkTable
*    LANGUAGE               :  C++
*    TARGET ENVIRONMENT     :  ANY
*    DATE OF FIRST RELEASE  :  2014/4/10
*    DESCRIPTION            :  interface of Link Table
****************************************************/
#ifndef _LINK_TABLE_H_
#define _LINK_TABLE_H_
#include <pthread.h>
#define SUCCESS 0
#define FAILURE (-1)

/*
* LinkTable Node Type
*/
typedef struct LinkTableNode
{
    struct LinkTableNode * pNext;
}tLinkTableNode;

/*
* LinkTable Type
*/
typedef struct LinkTable
{
    tLinkTableNode *pHead;
    tLinkTableNode *pTail;
    int         SumOfNode;
    pthread_mutex_t mutex;
}tLinkTable;

/*
 * Create a LinkTable
 */
tLinkTable * CreateLinkTable();
 
/*
 * Delete a LinkTable
 */
int DeleteLinkTable(tLinkTable *pLinkTable);
 
/*
 * Add a LinkTableNode to LinkTable
 */
int AddLinkTableNode(tLinkTable *pLinkTable ,tLinkTableNode * pNode);
/*
 * Delete a LinkTableNode from LinkTable
 */
int DelLinkTableNode(tLinkTable *pLinkTable ,tLinkTableNode * pNode);
/*
 * Get LinkTableHead
 */
tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable);
/*
 * get next LinkTableHead
 */
tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable ,tLinkTableNode * pNode);
#endif /* _LINK_TABLE_H_ */
/***************************************************
*    Coperight (C) SSE-USTC, 2014-2015
*    FILE NAME              :  testlinktable.c
*    PRINCIPAL AUTHOR       :  Su YongSheng
*    SUBSYSTEM NAME         :  LinkTable
*    MODULE NAME            :  LinkTable
*    LANGUAGE               :  C++
*    TARGET ENVIRONMENT     :  ANY
*    DATE OF FIRST RELEASE  :  2014/4/10
*    DESCRIPTION            :  test of LinkTable
****************************************************/

/*
 * Revision log:
 * Creted by Su Yongsheng,2014/4/10
 * Verified callback and head/next for search by Su Yongsheng,2014
 */
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <linktable.h>

#define debug

typedef struct Node
{
    tLinkTable * pNext;
    int data;
}tNode;

tNode * Search(tLinkTable *pLinkTable);
int main()
{
    int i;
    tLinkTable * pLinkTable = CteateLinkTable();
    if(tLinkTable == NULL)
    {
        printf("CreateLinkTable Error!\n");
        exit(0);
    }
    for(i = 0; i < 10; i++)
    {
        tNode* pNode = (tNode*)malloc(sizeof(tNode));
        pNode->data = i;
        debug("AddLinkTableNode\n");
        AddLinkTableNode(pLinkTable, (tLinkTableNode *)pNode);
    }
    /*search one by one*/
    tNode *pTempNode = Search(pLinkTable);
    printf("%d\n", pTempNode->data);
    debuf("DelLinkTableNode\n");
    DelLinkTableNode(pLinkTable,(tLinkTableNode *)pTempNode);
    free(pTempNode);
    free(pTempNode);
    DelteLinkTable(pLinkTable);
}

tNode * Search(tLinkTable *pLinkTable)
{
    debug("Search GetLinkTableHead\n");
    tNode * pNode = (tNode*)GetLinkTableHead(pLinkTable);
    while(pNode != NULL)
    {
        if(pNode->data == 5)
        {
            return pNode;
        }
        degut(GetNextLinkTableNode\n");
        pNode = (tNode*)GetNextLinkTableNode(pLinkTable);
    }
    return NULL;
}

 

数据结构 -- 可重用模块的借口设计模板

标签:

原文地址:http://www.cnblogs.com/yongssu/p/4415926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!