易截截图软件、单文件、免安装、纯绿色、仅160KB

在 C/C++中如何构造通用的对象链表(不很理解 )


http://blog.csdn.net/hwz119/archive/2007/05/25/1625218.aspx
    您是否做过这样一个项目,它要求您在内存中保存数目不定的若干不同对象?对于某些情况,二叉树是最佳选择,但在通常情况下,更简单的链表是显而易见的选择。
一个简化的问题示例
链表的难点在于必须复制链表处理函数来处理不同的对象,即便逻辑是完全相同的。例如:
两个结构类似的链表
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 newlist=NULL;
    void *p;
    // 分配节点内存和数据内存
    newlist = (pLIST) malloc( datasize + sizeof( LIST ) );
    // 为这块数据缓冲区指定一个指针
    p = (void *)( newlist + 1 );   //不理解
    // 复制数据
    memcpy( p, data, datasize );
    // 将这个节点指定给链表的表头
    if( Head!=NULL )
    {
        newlist


相关文档:

数学排列组合算法 P(N,M) C(N,M)

yeah,组合的也出来了,再一起发一个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication32
{
class Program
{

static int s = 0;
static void Main(string[] args)
{
Console.Writ ......

高质量C++/C编程指南

高质量C++/C编程指南
文件状态
[  ] 草稿文件
[√] 正式文件
[  ] 更改正式文件 文件标识: 
 当前版本: 1.0
 作    者: 林锐 博士
 完成日期: 2001年7月24日
版 本 历 史
版本/状态 作者 参与者 起止日期 备注
V ......

更改C:\Documents and Settings路径

      在Windows 2000/XP中,"Documents and Settings"是一个特殊文件夹。用户配置文件、桌面。甚至连密钥信息都保存在这里面。如果硬盘空间不够,想把它们换个地方。但这些东西却很难移动。我们的问题是:如何在保证系统正常运行的情况下,将"Documents and Settings"文件夹移动到另外一个分区? ......

C/C++ 路径为目录判断

#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
/****************************************************
* 函数功能: 判断参数路径是否为(正确的)目录
* 函数返回: 0为表示路径为文件,1为非目录.其他为错误
*    参数: path文件需要判断的目录的路径.
*  ......

C/C++ 判断路径为文件

/***************************************************
* 函数说明: 判断当前path参数是否为一个可读的文件
* 函数返回: 0 - 文件刻度 1 - 权限拒绝 -1 -函数错误
*   参 数 : path 文件路径.
***************************************************/
int isReadFile(const char *path)
{
  &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号