鱼C论坛

 找回密码
 立即注册
查看: 2316|回复: 3

C 结构未解之谜,有原代码

[复制链接]
发表于 2016-8-10 19:07:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include "stdafx.h"
#include <windows.h>

typedef struct _DATA_LINK
{
        /*链域,*llink是左链域指针,*rlink是右链域指针*/
        struct _DATA_LINK *L;             // 定义一个结构指针
        struct _DATA_LINK *R;             // 定义一个结构指
        // struct _DATA_LINK *Head;
       
        int data; /*数据域*/
        int data2;
       
}DATA_LINK,*PDATA_LINK;

VOID Link_Test();  

//LIST_ENTRY My_List; //自定义链接头


PDATA_LINK head=new DATA_LINK;  //定义一个指针结构结构  申请一块内存
PDATA_LINK        pData; // 定义一个指针结构结构变量


int main(int argc, char* argv[])
{
   
    Link_Test();

        return 0;
}

VOID Link_Test()  // 链接 测试
{
       
        //初始化链表
        head->L = head->R = head; // 让头的   L R 指向自己
        head->data=0;          //数据初始化
        head->data2=0;         //数据初始化
    printf("head=%x\n",head);//打印出 头的地址
        PDATA_LINK Tlink;// 定义一个结构指针类型结构变量-
       
        //在链表中插入5个元素
        printf(("开始构建链表 \n"));
        for (int i=1 ; i<=5 ; i++)//循环5次
        {
                pData =new DATA_LINK;  //申请了一块内存
               
                pData->data = i;
                pData->data2= i+1;
                //
                Tlink=head->R;//保存后续结点  指向了头的起始地址
               
                Tlink->L=pData;  // 头 左 指向 结构pData在内存中的起始地址
                head->R=pData;  //头 右 指向 结构pData在内存中的起始地址
                //
                pData->R=Tlink;
                pData->L=head;
               
                //  printf("Node%d=%x,R=%x,L=%x,%d,%d\n",
                //        pData->data-7,pData,pData->R,pData->L,pData->data,pData->data2);         
        }
       
        //从链表中取出,并显示
        printf("head=%x\n",head);
       
    PDATA_LINK pnode=head;  // 新声明结构变量指向 head 结构变量
           do   //判断 R遍历完成否
        {
               
                //显示链表内存结构
                printf("结点%d=%x,  \t  L=%x,\t R=%x,\t  %d,\t  %d\n",
                        pnode->data,  pnode,  pnode->L, pnode->R,  pnode->data,  pnode->data2);
                //                    address    L           R
                pnode=pnode->L; //改变判断条件
               
        } while (pnode != head);//while (!(pnode==head));
       
}

/*         这段代码能模拟出链接表的结构 求解下面的 while 循环 只是把结构pnode 地址 指向了自身结构中的 L结构
为何打出的地址 data 1 2 会是上面 for循环中 pData 里面的值  pnode指向的是 head 而 head 的结构只有  
head->R=pData;  下面while循环 pnode并没有指向自身的  pnode->R  却打印出的是 pnode->R 指向的
pData 里面的值 ??                            */

这段代码最终运行效果

这段代码最终运行效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-10 19:18:21 | 显示全部楼层
sha daima  zhem luan ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-11 00:46:18 | 显示全部楼层
没有C++的环境了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-11 09:51:11 | 显示全部楼层
代码看懂了,只是不懂lz问的啥。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-5 00:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表