关于c的双向链表中的问题求解答

问题描述

关于c的双向链表中的问题求解答

typedef struct sum {
int num;
int length;
struct sum * pnext; 下个节点
struct sun * pbefore; 上个节点
} number;

我在添加函数中
n1 = (number *)malloc(sizeof(number) );
printf("请输入数字.n");

scanf_s("%d",&( n1->num));

printf("请输入标记数字。n");
scanf_s("%d",&n1->length);
n1->pnext = n1;         //这里正确通过了
n1->pbefore = n1;    //这里提示 不能将 number *类型的值 分配到  sum* 类型的实体中

我就奇怪了  俩个一模一样的语句  ,上边的没事 下边提示有这个错误。请高手帮看一下 这是什么原因啊

解决方案

这个是我的整体代码 如下:
number * n;
n = p->pheads;
number * n1;
n1 = (number *)malloc(sizeof(number) );
printf("请输入数字.n");

scanf_s("%d",&( n1->num));

printf("请输入标记数字。n");
scanf_s("%d",&n1->length);
n1->pnext = n1;                                 //这个却没有提示  。请问是什么原因啊
n1->pbefore = n1;                            //这里提示错误,不能将 number * 类型的值 分配 到sum*类型的实体
if (!empty(*p))
{
    p->pheads = n1;
    printf("okn");
}
else
{
    while (p->pheads->pnext != NULL)                         //循环寻找到最后的空指针
    {
        p->pheads->pnext = p->pheads->pnext->pnext;
    }

    n1->pbefore = p->pheads;         //这里也提示那样的错误 ,显示 不能将sum* 类型的值 分配到 sum* 类型的实体
    p->pheads->pnext = n1;
    p->pheads = n;
}

// p->pheads = n; //重新定位头指针

}
这个是我的添加函数中的代码。

结构体如下:typedef struct sum {
int num;
int length;
struct sum * pnext;
struct sun * pbefore;
} number;
这个是结构体

typedef struct phead {
number * pheads;
}ph;
求高手解答一下。3q了

解决方案二:

我的思路是直接一个循环直接赋值。但是在赋值前一个的指针时就有这种提示 :不能将 sum * 类型的值 分配到 sum* 类型的实体 。
我不能理解 按照道理来讲 。

       通过循环和判断得到当前   p->phead
                                             p->phead->pnext 为下个结构体

                                                                        n1->pbefore = p->phead;    //这里是对 添加的数据n1的前指针进行赋值的  没错啊   但是提示这里有错误。
                                                                        p->phead->pnext  = n1;   这里是没有错的。

解决方案三:

就是提示sum* 类型的值不能分配到sum* 类型的实体 。

求解答 。以前写的时候都没有这个提示的 只是想改下程序 换个方法 就这样了

解决方案四:

开始程序都是能正确运行的,主要是 后来在添加删除功能时 。就想到直接在结构中加个前指针 那样方面 。但是当
开始对前指针赋值时出现了这个问题。前面的程序没有问题的 主要在这个前指针赋值上。求解答一下。

解决方案五:

这是一条编译错误提示。
代表在代码中,把一个int**类型的值,赋值给了int类型的变量。
类似于
int v;
int *p = &v;
然后做了
v = &p;
这样的操作。

类似操作,大多数是误写,本来要写
p=&v;
但是写成了
v=&p;
针对修改即可。

如果确定要把int**值赋值给int,可以采用
v=(int)&p;
的方式。
不过需要注意的是,在16位和32位系统中,可以完整保存地址值,但是在64位系统中,int**占8字节,而int占4字节,该操作会导致信息丢失。

解决方案六:

n1->pbefore = p->phead; //这里是对 添加的数据n1的前指针进行赋值的 没错啊 但是提示这里有错误。
这里需要这么写 n1->pbefore = p->phead->pbefore; 两种不同类似不能赋值;

时间: 2024-08-17 09:08:35

关于c的双向链表中的问题求解答的相关文章

磁盘-新手学习C语言文件,问题已经在程序中备注,求解答!

问题描述 新手学习C语言文件,问题已经在程序中备注,求解答! //怎样向文件读写字符 #include #include int main() { FILE * fp; char ch,filename[10]: printf("请输入所用的文件名:"); scanf("%s",filename); if((fp = fopen(filename,"w")) == NULL)//为什么这里的filename没有双引号引起来: { printf(&

ios-opencv在iOS系统中缺少stdint,求解答

问题描述 opencv在iOS系统中缺少stdint,求解答 如图,在官方下载的框架opencv3.0的,但总是显示缺东西,是不是我其他的框架没配好?谢谢指导 解决方案 错了,是缺少cstdint,少打了 解决方案二: opencv3是mac的,opencv2才是ios的.

mfc-MFC中如何使用求导法判断周期数据中的拐点和鞍点

问题描述 MFC中如何使用求导法判断周期数据中的拐点和鞍点 MFC中如何使用求导法判断周期数据中的拐点和鞍点,分别提取它们到新的数据文件 解决方案 http://zhidao.baidu.com/link?url=hFcevJMBxUipTvIYlyYLYpCQsQkLqhwInXMkJ0Qtt65fs1UPgtAasbpQIxQzk4Tz9ZMBWUbk-ao5PGrGV3w6fAoRv73ZYSgLAh0i3IHurTW

实例-shell中的正则表达式问题 求解答

问题描述 shell中的正则表达式问题 求解答 在正则表达式中特殊字符 点字符 .该如何使用? 看到书上说 点特殊字符用于匹配除换行符之外的任何单个字符,然后看了实例表示还是看不到,求解答...这个 . 到底怎么用 解决方案 . 在正则里就是匹配除换行符外的任意字符.例如,原文件text.txt的内容为: ab5erabcerad(erab(ercd(erab$eraberababeraberab er 现在使用正则表达式 ab.er 匹配出来的结果如下:正则表达式/ab.er/说明: 解决方案

设置-初始配置win7中的IIS求指教

问题描述 初始配置win7中的IIS求指教 问一下初始配置win7中的IIS时绑定和基本设置怎么设啊,书中有介绍但是路径啊网站啊什么的不知道怎么设置啊,怕自己设置错所以求大牛指教一下 解决方案 如果你用的是原版系统,安装好iis无需任何设置就可以使用. 浏览http://localhost/就能看到多国语言的欢迎页面. 部署一个asp.net(最简单,假设没有用数据库)的步骤. 打开IIS管理器,选择左边站点,新建站点,输入一个名字,选择一个目录,比如wwwrootsite1 然后将网站文件拷贝

知道二叉树的后序遍历和中序遍历求深度的代码那有错?

问题描述 知道二叉树的后序遍历和中序遍历求深度的代码那有错? #include #include #include char zhongxu[100]; char houxu[100]; struct node { char data; struct node *l,*r; }*T,*TT; int treedepth(struct node *TT) { int i,j; if(!TT) return 0; i=treedepth(TT->l); j=treedepth(TT->r); re

select-SQL可以再客户端执行不能在程序中执行,求大神指点?急

问题描述 SQL可以再客户端执行不能在程序中执行,求大神指点?急 SQL如下: select distinct b.COLUMN_NAME,b.comments,a.column_id from user_tab_columns a,user_col_comments b where a.column_name=b.column_name and b.table_name=upper('YFRAME_STU') order by a.column_id; 解决方案 upper('YFRAME_S

滚动条代码-vs中编写了个关于垂直滚动条的代码,其中有几处不理解,求解答

问题描述 vs中编写了个关于垂直滚动条的代码,其中有几处不理解,求解答 这是代码: #include #include"resource.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { static char szAppName

collections-Java问题:Collections类中copy方法的疑问,求解答

问题描述 Java问题:Collections类中copy方法的疑问,求解答 解决方案 copy方法,第二个参数的list长度要小于第一个参数的list长度. 也就是copy方式是把第二个参数中的list值放到第一个参数的list中,从0开始