鱼C论坛

 找回密码
 立即注册
查看: 2070|回复: 2

求解C++模拟链接结构实现原理,有代码

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

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

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

x
// test_exe.cpp : Defines the entry point for the console application.
//

#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));
       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-10 18:58:54 | 显示全部楼层
这段代码能模拟出链接表的结构 求解下面的 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-11 09:47:17 | 显示全部楼层
调试看看吧 , 不会调试你学不深
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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