会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
业精于勤荒于嬉,形成于思毁于随
订阅
管理
2.4-其它运算在单链表上的实现
//
DataStructTest.cpp : Defines the entry point for the console application.
//
#include
"
stdafx.h
"
#include
<
iostream.h
>
#include
<
malloc.h
>
typedef
struct
node
*
pointer;
struct
node
{
int
data;
pointer next;
}
;
typedef pointer lklist;
lklist head
=
NULL;
//
表头
//
建表,只做了第二种建表的算法,第一种书上只作为引例,且算法为O(n2),所以呼略不做了
lklist create_lklist2()
{
int
x
=
0
;
head
=
(lklist)malloc(
sizeof
(node));
lklist p
=
head;
cout
<<
"
请输入数据项的值,-1结束
"
;
cin
>>
x;
while
(x
!=-
1
)
{
p
->
next
=
(lklist)malloc(
sizeof
(node));
p
->
next
->
data
=
x;
p
=
p
->
next;
cout
<<
"
请输入数据项的值,-1结束
"
;
cin
>>
x;
}
p
->
next
=
NULL;
return
head;
}
//
删除重复结点
void
purge_lklist(lklist head)
{
lklist p
=
head
->
next;
while
(p
!=
NULL)
{
lklist q
=
p;
//
单链表的做删除操作时,工作结点指向待删的前驱结点
while
(q
->
next
!=
NULL)
{
if
(q
->
next
->
data
==
p
->
data)
{
lklist r
=
q
->
next;
q
->
next
=
r
->
next;
free(r);
}
else
{
q
=
q
->
next;
}
}
p
=
p
->
next;
}
}
//
显示
void
display(lklist head)
{
lklist p
=
head;
int
i
=
0
;
p
=
p
->
next;
//
指向第一个结点
while
(p
!=
NULL)
{
i
++
;
cout
<<
"
第
"
<<
i
<<
"
个元素的值为:
"
<<
p
->
data
<<
endl;
p
=
p
->
next;
}
}
int
main(
int
argc,
char
*
argv[])
{
char
*
error
=
NULL;
pointer p
=
NULL;
int
i
=
0
;
head
=
create_lklist2();
cout
<<
"
初始化的表为:
"
<<
endl;
display(head);
purge_lklist(head);
cout
<<
"
删除重复项后的表为:
"
<<
endl;
display(head);
return
0
;
}
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。
posted @
2007-06-25 09:12
吴东雷
阅读(
211
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
公告