本帖最后由 超神级 于 2014-2-26 21:01 编辑
链表篇start: 话说链表真的不难!我学链表的时候就被坑了!因为很多人都说难我就认为难!吓得自己学的时候就知道了p跟着别人的思路走!看这篇教程的时候千万不要跟着我的思路走!自己多问为什么.!例如为什么需要链表呢!因为数组是连续的内存空间大小有限假设定义了一个数组char a[2].如果a[1]的地址是1那么a[2]的地址就是2!链表呢!不是一块连续内存的空间!用指针相连!假设第一个结点的内存地址是1,那么第2块的地址有可能就是111,链表的出现只不过是为了大规模的存储吧!.....
个人感觉链表就好像是以前的火车火车头后面一节一节挂一节!why为什么火车是一节一节的呢@话说网友真的很给力!答案自己有兴趣百度下! 链表其实吧最多就算一个写的比较好的算法而已!并不是一个知识点!如果你结构体,动态内存分配,指针方面不错的话都是可以尝试着自己写一个链表的!
链表的结构!1.头节点,2首节点,3尾节点的指针域为NULL!一个单链表的的节点通常有两部分,前面一部分是数据,后面一部分是指向下一个节点的指针!单链表就好像排队一样你知道你前面那个人是男是女但是你后面的就不知道是男是女了!;单链表就像火车一样!有了火车头才有后面的车厢!想要去2车厢就要先去1车厢然后才可以找到2车厢!衔接也是先要有个火车头。然后才可以往后面挂1车厢然后2车厢然后3车厢这样挂!
下面我就把链表的伪算法提供给大家由于本人水平有限希望大神们给提供个更好的伪算法!希望大家试着写10分钟写不出来也没关系很正常!
伪算法:求提供!刚才写了个自己看下真是惨不人睹真没思路了使用结构体定义链表的数据类型
使用malloc函数动态分配内存
读取用户输入的数据存入动态分配的内存空间里!
进行衔接!
遍历
找到头结点!
非空输出是空退出
head=head->next
====================================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>//头文件必须加!
struct student
{
int id;//定义一个属性(数据域)
struct student*next;//指向下个节点(指针域)!};//这就是单链表的简单结构!数据类型。
struct student *hanshu(void)
{
int a,b,c;
struct student*head=malloc(sizeof(struct student));
struct student*head2=head;//
printf("你要建立几个节点\n");
scanf("%d",&a);
for(b=1;b<=a;b++)
{
printf("请输入你要增加的ID号\n");
scanf("%d",&c);
struct student *tail=malloc(sizeof(struct student));
tail->id=c;
head2->next=tail;//进行衔接
//head2=head2->next;这是挂结点的两种方式!都看下吧试着理解!
tail->next=NULL;//里面有垃圾值赋值为0.
}
head2=NULL;
return head;//返回头指针!
}
void traverse(struct student *head)
{
while(head->next!=NULL)
{
head=head->next;//下一个结点自己推演下!
printf("%d\n",head->id);//输出id
}
}
int main()
{
struct student*head;//定义一个头指针
head=hanshu();//接收返回的头指针
traverse(head);//传地址
system("pause");
return 0;
}
链表就是这个指下一个下一个指下下一个!下下指下下下个下下下个指下下下下个.好吧我看着都有点晕+_+!如果学会了赞个!没学会拍块砖、
|