我的第一个结构链表

<iostream><iostream><head-><head-></head-></head-></iostream></iostream>
我的第一个结构链表

这天上午,我准备学链表,最简单的单链,然后我打开教材,用眼睛扫了一遍。恩,在脑子里印像最深的,就是要完成链表,需要三个指针,一个带指向自己针指的结构。就是下面这样

struct temp
... {
inta;
temp
*next;
}
;

哦,就是这样。其它的有印像也是很模糊的。想不起来有什么具体内容。我的学习过程可能比较奇怪,因为我喜欢自己解决问题。所以我就放下了教材,把毛巾盖在脸上。闭上眼睛。
在头脑里形成这样的概念。什么是链表呢?以前听说过,这东西就是动态分配内存中的结构一个联一个,用结构中的那个指针指向下一个结构。
怎么完成呢,我有三个指针。第一步,我需要有一个指针建第一个结构,如下:

jianlian
= new temp;

然后我需要再建第二个结构,用第二个指针?哦不不不,想起来点了,好像只用一个指针建新的结构。那我怎么办呢?把第二个指针指向建好的这个。

genban
= jianlian;

下面用第一个指针建第二个:

jianlian
= new temp;

下面我们要做什么了呢,对了,把第一个和第二个结构联起来
genban
-> next = jianlian;
哈!
让第一个结构里的指针元素来联上第二个!我觉得我要成功一大半了。
好像可以建第三个了
jianlian
= new temp?
哦,不不不,不是这样。如果是这样我们怎么访问这第三个结构呢,怎么给这东西赋值?难道用这个?

genban
-> next -> next.......next..

哦,不,我不希望这样,这样手动打字会很累的,我们需要的是循环控制,我们怎么办呢

恩,我们需要把genban弄过来,genban
= jianlian;
然后新建结构哈jianlian
= new temp;

然后再把第二个的genban
-> next指向新的,嘿嘿,成了

呃。。好像不对。。书上说用三个指针。。我怎么用了两个呢。。难道俺是天才?

不管了,写程序去。拿开脸上的毛巾,开始编。。



#include
< iostream >
using namespace std;

struct lian
... {
intnumber;
stringname;
lian
*next;
}
;

lian
* head;

lianjianlian()
... {
lian
*ls;
lian
*le;

ls
=newlian;

cout
<<"请输入编号和名字: ";
cin
>>ls->number>>ls->name;

while((ls->name=="null")==0)
...{

if(head==NULL)
...{
head
=ls;
}

else
...{
le
->next=ls;
}

le
=ls;
ls
=newlian;
cin
>>ls->number>>ls->name;
}


le
->next=NULL;
deletels;
return0;
}


呃。。遇到困难了。。我怎么用这个链呢。。两个手指针一个在前建一个在后跟着。。哪以前的我怎么找。。
这不是熊瞎子掰包玉,掰一个丢一个吗。。最开始的哪个哪里去了。

啊,三个指针,哈哈,原来如此!!有一个指针是指向第一个结构的,哈哈
重写!

#include
< iostream >
using namespace std;

struct lian
... {
intnumber;
stringname;
lian
*next;
}
;

lian
* head;

lian
* jianlian()
... {
lian
*ls;
lian
*le;

ls
=newlian;

cout
<<"请输入编号和名字: ";
cin
>>ls->number>>ls->name;

head
=NULL;

while((ls->name=="null")==0)
...{

if(head==NULL)
...{
head
=ls;
}

else
...{
le
->next=ls;
}

le
=ls;
ls
=newlian;
cin
>>ls->number>>ls->name;
}


le
->next=NULL;
deletels;

returnhead;
}


void print(lian * head)
... {
while(head->next!=NULL)
...{
cout
<<head->number<<""<<head->name<<endl;
head
=head->next;
}


}


int main()
... {
print(jianlian());
return0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值