当前位置: 首页 > news >正文

php技术的网站建设实录方案做二手手机的网站有哪些

php技术的网站建设实录方案,做二手手机的网站有哪些,张家港网站建设优化,南京代做网站(转载至#xff1a;http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip02/#xff0c;感谢T. W. Burger先生) 一个简化的问题示例 链表的难点在于必须复制链表处理函数来处理不同的对象#xff0c;即便逻辑是完全相同的。例如#xff1a; 两个结构类似的链表 st… (转载至http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip02/感谢T. W. Burger先生) 一个简化的问题示例 链表的难点在于必须复制链表处理函数来处理不同的对象即便逻辑是完全相同的。例如 两个结构类似的链表 struct Struct_Object_A {int a;int b;Struct_Object_A *next; } OBJECT_A; typedef struct Struct_Object_B {int a;int b;int c;Struct_Object_B *next; } OBJECT_B; 上面定义的两个结构只有很小的一点差别。OBJECT_B 和 OBJECT_A 之间只差一个整型变量。但是在编译器看来它们仍然是非常不同的。必须为存储在链表中的每个对象复制用来添加、删除和搜索链表的函数。为了解决这个问题可以使用具有全部三个变量的一个联合或结构其中整数 c 并不是在所有的情况下都要使用。这可能变得非常复杂并会形成不良的编程风格。 回页首 C 代码解决方案虚拟链表 此问题更好的解决方案之一是虚拟链表。虚拟链表是只包含链表指针的链表。对象存储在链表结构背后。这一点是这样实现的首先为链表节点分配内存接着为对象分配内存然后将这块内存分配给链表节点指针如下所示 虚拟链表结构的一种实现 typedef struct liststruct {liststruct *next; } LIST, *pLIST; pLIST Head NULL; pLIST AddToList( pLIST Head, void * data, size_t datasize ) { pLIST newlistNULL; void *p;// 分配节点内存和数据内存newlist (pLIST) malloc( datasize sizeof( LIST ) );// 为这块数据缓冲区指定一个指针p (void *)( newlist 1 );// 复制数据memcpy( p, data, datasize );// 将这个节点指定给链表的表头if( Head ){newlist-next Head;}elsenewlist-next NULL;Head newlist;return Head; } 链表节点现在建立在数据值副本的基本之上。这个版本能很好地处理标量值但不能处理带有用 malloc 或 new 分配的元素的对象。要处理这些对象LIST 结构需要包含一个一般的解除函数指针这个指针可用来在将节点从链表中删除并解除它之前释放内存或者关闭文件或者调用关闭方法。 一个带有解除函数的链表 typedef void (*ListNodeDestructor)( void * ); typedef struct liststruct {ListNodeDestructor DestructFunc;liststruct *next; } LIST, *pLIST; pLIST AddToList( pLIST Head, void * data, size_t datasize, ListNodeDestructor Destructor ) { pLIST newlistNULL; void *p;// 分配节点内存和数据内存newlist (pLIST) malloc( datasize sizeof( LIST ) );// 为这块数据缓冲区指定一个指针p (void *)( newlist 1 );// 复制数据memcpy( p, data, datasize );newlist-DestructFunc Destructor;// 将这个节点指定给链表的表头if( Head ){newlist-next Head;}elsenewlist-next NULL;Head newlist;return Head; } void DeleteList( pLIST Head ) {pLIST Next;while( Head ){Next Head-next;Head-DestructFunc( (void *) Head );free( Head );Head Next;} } typedef struct ListDataStruct {LPSTR p; } LIST_DATA, *pLIST_DATA; void ListDataDestructor( void *p ) {// 对节点指针进行类型转换pLIST pl (pLIST)p;// 对数据指针进行类型转换pLIST_DATA pLD (pLIST_DATA) ( pl 1 );delete pLD-p; } pLIST Head NULL; void TestList() {pLIST_DATA d new LIST_DATA;d-p new char[24];strcpy( d-p, Hello ); Head AddToList( Head, (void *) d, sizeof( pLIST_DATA ),ListDataDestructor );// 该对象已被复制现在删除原来的对象delete d;d new LIST_DATA;d-p new char[24];strcpy( d-p, World ); Head AddToList( Head, (void *) d, sizeof( pLIST_DATA ),ListDataDestructor );delete d;// 释放链表DeleteList( Head ); } 在每个链表节点中包含同一个解除函数的同一个指针似乎是浪费内存空间。确实如此但只有链表始终包含相同的对象才属于这种情况。按这种方式编写链表允许您将任何对象放在链表中的任何位置。大多数链表函数要求对象总是相同的类型或类。虚拟链表则无此要求。它所需要的只是将对象彼此区分开的一种方法。要实现这一点您既可以检测解除函数指针的值也可以在链表中所用的全部结构前添加一个类型值并对它进行检测。当然如果要将链表编写为一个 C 类则对指向解除函数的指针的设置和存储只能进行一次。 回页首 C 解决方案类链表 本解决方案将 CList 类定义为从 LIST 结构导出的一个类它通过存储解除函数的单个值来处理单个存储类型。请注意添加的 GetCurrentData() 函数该函数完成从链表节点指针到数据偏移指针的数学转换。 一个虚拟链表对象 // 定义解除函数指针 typedef void (*ListNodeDestructor)( void * ); // 未添加解除函数指针的链表 typedef struct ndliststruct {ndliststruct *next; } ND_LIST, *pND_LIST; // 定义处理一种数据类型的链表类 class CList : public ND_LIST { public:CList(ListNodeDestructor);~CList();pND_LIST AddToList( void * data, size_t datasize );void *GetCurrentData();void DeleteList( pND_LIST Head ); private:pND_LIST m_HeadOfList;pND_LIST m_CurrentNode;ListNodeDestructor m_DestructFunc; }; // 用正确的起始值构造这个链表对象 CList::CList(ListNodeDestructor Destructor): m_HeadOfList(NULL), m_CurrentNode(NULL) {m_DestructFunc Destructor; } // 在解除对象以后删除链表 CList::~CList() {DeleteList(m_HeadOfList); } // 向链表中添加一个新节点 pND_LIST CList::AddToList( void * data, size_t datasize ) { pND_LIST newlistNULL; void *p;// 分配节点内存和数据内存newlist (pND_LIST) malloc( datasize sizeof( ND_LIST ) );// 为这块数据缓冲区指定一个指针p (void *)( newlist 1 );// 复制数据memcpy( p, data, datasize );// 将这个节点指定给链表的表头if( m_HeadOfList ){newlist-next m_HeadOfList;}elsenewlist-next NULL;m_HeadOfList newlist;return m_HeadOfList; } // 将当前的节点数据作为 void 类型返回以便调用函数能够将它转换为任何类型 void * CList::GetCurrentData() {return (void *)(m_CurrentNode1); } // 删除已分配的链表 void CList::DeleteList( pND_LIST Head ) {pND_LIST Next;while( Head ){Next Head-next;m_DestructFunc( (void *) Head );free( Head );Head Next;} } // 创建一个要在链表中创建和存储的结构 typedef struct ListDataStruct {LPSTR p; } LIST_DATA, *pND_LIST_DATA; // 定义标准解除函数 void ClassListDataDestructor( void *p ) {// 对节点指针进行类型转换pND_LIST pl (pND_LIST)p;// 对数据指针进行类型转换pND_LIST_DATA pLD (pND_LIST_DATA) ( pl 1 );delete pLD-p; } // 测试上面的代码 void MyCListClassTest() {// 创建链表类CList* pA_List_of_Data new CList(ClassListDataDestructor);// 创建数据对象pND_LIST_DATA d new LIST_DATA;d-p new char[24];strcpy( d-p, Hello ); // 创建指向链表顶部的局部指针pND_LIST Head NULL;//向链表中添加一些数据Head pA_List_of_Data-AddToList( (void *) d, sizeof( pND_LIST_DATA ) );// 该对象已被复制现在删除原来的对象delete d;// 确认它已被存储char * p ((pND_LIST_DATA) pA_List_of_Data-GetCurrentData())-p;d new LIST_DATA;d-p new char[24];strcpy( d-p, World ); Head pA_List_of_Data-AddToList( (void *) d, sizeof( pND_LIST_DATA ) );// 该对象已被复制现在删除原来的对象delete d;// 确认它已被存储p ((pND_LIST_DATA) pA_List_of_Data-GetCurrentData())-p;// 删除链表类析构函数将删除链表delete pA_List_of_Data; }回页首 小结 从前面的讨论来看似乎仅编写一个简单的链表就要做大量的工作但这只须进行一次。很容易将这段代码扩充为一个处理排序、搜索以及各种其他任务的 C 类并且这个类可以处理任何数据对象或类在一个项目中它处理大约二十个不同的对象。您永远不必重新编写这段代码。转载于:https://www.cnblogs.com/yin-jingyu/archive/2012/03/06/2381315.html
http://www.zqtcl.cn/news/302441/

相关文章:

  • 做网站店铺装修的软件怎么做淘课网站
  • 百度一下官方网站wordpress连接代码
  • 什么网站详情页做的好仿唧唧帝笑话门户网站源码带多条采集规则 织梦搞笑图片视频模板
  • 平原网站建设费用少儿编程加盟店倒闭
  • 企业网站建设专业公司蜜淘app在那个网站做的
  • 市住房城乡建设部网站大学生课程设计网站
  • 广州大石附近做网站的公司外包服务公司是干什么的
  • 做的新网站网上搜不到做的网站百度搜索不出来的
  • 电商网站后台报价公司如何建站
  • 查网站有没有做推广企业网站建设的目标
  • 北京网站维护公司专业外贸网站建设_诚信_青岛
  • 网站自己做还是用程序制作网站一般使用的软件有哪些
  • 晨雷文化传媒网站建设济南互联网品牌设计
  • 怎样给自己的网站做防红连接梵客装饰公司官网
  • 甘肃省城乡与住房建设厅网站纪检网站建设动态主题
  • 关于做好全国网站建设网站建设哪个好
  • 灵犀科技网站建设企业建设网站作用
  • 做网站架构图无版权图片网站
  • 赌场需要网站维护吗通过服务推广网站的案例
  • 阿里云网站空间网站建设犭金手指六六壹柒
  • 网站排名软件包年农业网站开发
  • 建设信用卡网银网站crm客户关系管理论文
  • 阿里巴巴网站的搜索引擎优化案例软件开发收费价目表
  • 企业网站建设之域名篇wordpress 文章居中
  • 萍乡网站建设行吗南康建设局官方网站
  • 一键部署wordpress爱站seo工具
  • 大连网站建设服务做进料加工在哪个网站上做
  • 南昌行业网站建设网站版权信息修改
  • 百度网站关键词排名助手低成本做网站 白之家
  • 怎么查询网站是谁做的部队网站建设报告