读书人

简单有关问题明天结贴关于动态链表

发布时间: 2012-03-01 10:25:46 作者: rapoo

简单问题,明天结贴,关于动态链表概念
静态链表:
所有结点都是在程序中定义,不是临时开辟的,也不能用完后释放。
动态链表:
在需要时才开辟一个结点的存储单元。

我以前的理解一直以后,结构体内保存地址的next在动态链表中,是随时独立赋值和删去的。好象不对
在静态链表中,我要用一个,用成员符运算,赋值一个,也是临时开辟啊
这不是与动态链表功能一致了吗?
malloc到底是干什么用啊

[解决办法]
静态和动态的区别可以举个例子说明:

数组:
int a[10]; //静态 事先将内存分配出来
int *p = NULL; //动态,可以根据需要动态分配内存 如: p = (int*) malloc(n); 记得释放free(p); p = NULL;


其实连表和这个道理是一样的道理.不过一般来说动态肯定比静态更科学更好,因为实时分配内存,不会浪费空间,更灵活.

malloc的作用其实就是动态分配可用内存并返回地址.
[解决办法]
lz概念太混乱 建议看书去
静态一般是指 空间大小 有限的 大小固定的
动态是指空间 大小可变的 可以用申请空间的方法来变大的
malloc 就是 申请空间用的
[解决办法]
搂住可能是被谭的书给弄懵了,你不要怀疑malloc()的用途,他就是用来动态分配内存块的。只能用在动态链表中,如果在静态链表中也用到了malloc,那这个链表就不是静态的!


[解决办法]
静态的不能叫链表,而叫顺序表,空间不可变。
动态的可变
[解决办法]
//我以前的理解一直以后,结构体内保存地址的next在动态链表中,是随时独立赋值和删去的。好象不对
那个next只不过是一个sizeof=4(假设是win32)、用来存放32位地址的东东。从占用空间上看,结构体中的其它东西一般都不比它小
你的随时独立赋值和删去,其是修改那4个字节存储的值,删去对应修改为0,
next这个东东放在你分配的节点(结构体)中
动态或静态针对整个节点,和那个next无关

//在静态链表中,我要用一个,用成员符运算,赋值一个,也是临时开辟啊
在你赋值前,整个节点已经分配好了,你的赋值是修改其中4个字节存储的值
[解决办法]

C/C++ code
#include <stdio.h> //#define   NULL   0       我把这个屏蔽了,依然是对的.直接用   指针=0代 struct   student{ long   num; float   score; struct   student   *   next; }; void   main() { printf( "\n\n "); struct   student   a,b,c,*head,*p,*ppp; a.num=10101;a.score=89.5; b.num=10102;b.score=90.0; c.num=10102;c.score=89.5; head=&a; a.next=&b; b.next=&c; c.next=0;     //这里有点不理解.(没什么,和NULL是同一个意思,就是把0作为地址值赋给指针) p=head; int   aaa; printf( "addr   ppp:%x,   %d\n ",&ppp,aaa); printf( "\n%x\n ",&aaa); do{ printf( "\naddress   p   %x\n ",p);   //此时输出结构体a的首地址printf( "%ld       %4.1f\n ",p-> num,p-> score); p=p-> next;    // 第一次循环时,将p指向了a后面的结构体的首地址(即&b),以此类推! 当执行到c结构体时p=0}while(p!=0);  //  c.next   =0   是同一概念吗?-----就是同一个值printf( "\naddress   p   %x\n ",p); }
[解决办法]
到这来讨论吧

菜鸟学编程之C++/MFC: QQ群 41977413 C++/MFC编程开发技术,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加

菜鸟学编程之C/C# : QQ群 41976716 C/C#编程开发技术,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加

菜鸟学编程之VB/ VBA : QQ群 20772662 VB/ VBA编程开发技术群,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加

读书人网 >C语言

热点推荐