您的位置:首页 > 其它

循环链表的插入和删除

2016-01-15 00:00 246 查看
循环链表可以用来使计算机处理内存工作区或输出至数据缓冲区。




循环链表的插入和删除

#include
"
iostream
"

#include
"
stdlib.h
"

using

namespace
std;

struct
clist
{

int
data;

struct
clist
*
next;
};
typedef
struct
clist cnode;
typedef cnode
*
clink;

/*
-----循环链表的输出------
*/

void
printclist( clink head)
{
clink ptr;
head
=
head
->
next;
ptr
=
head;

do

{
printf(
"
[%d]
"
,ptr
->
data);
ptr
=
ptr
->
next;
}
while
(head
!=
ptr
&&
head
!=
head
->
next);
printf(
"
\n
"
);

}

/*
-----循环链表的结点插入----
*/

clink insertnode(clink head,clink ptr,
int
value)
{
clink new_node;
new_node
=
(clink) malloc(
sizeof
(cnode));

if
(
!
new_node)

return
NULL;
new_node
->
data
=
value;
new_node
->
next
=
NULL;

if
(head
==
NULL)
{
new_node
->
next
=
new_node;

return
new_node;
}

if
(ptr
==
NULL)
{

/*
----情况1:插在第一结点之前---
*/

new_node
->
next
=
head
->
next;
head
->
next
->
next
=
new_node;
}

else

{

/*
-----情况2:插在结点之后-------
*/

new_node
->
next
=
ptr
->
next;
ptr
->
next
=
new_node;
}

if
(ptr
==
head)
head
=
new_node;

return
head;
}

/*
---循环链表结点删除---
*/

clink deletenode(clink head,clink ptr)
{
clink previous;

if
(head
==
NULL)
{

/*
----情况1:删除第一个结点----
*/

head
->
next
=
ptr
->
next;
}

else

{

/*
--情况2:删除中间结点---
*/

previous
=
head;

if
(head
!=
head
->
next)

while
(previous
->
next
!=
ptr)
previous
=
previous
->
next;
previous
->
next
=
ptr
->
next;
}

if
(ptr
==
head)
head
=
previous;
free(ptr);

return
head;
}

/*
使用插入结点的方式来创建链表,完成后将链表内容输出,然后删除前后两结点
*/

int
main()
{
clink head
=
NULL;

int
list[
6
]
=
{
9
,
7
,
3
,
4
,
5
,
6
};

int
i;

head
=
insertnode(head,head,list[
0
]);
printf(
"
创建第一个结点:
"
);
printclist(head);

/*
---情况1:插在第一结点前----
*/

head
=
insertnode(head,NULL,list[
1
]);
printf(
"
插入第一结点之前:
"
);
printclist(head);

for
(i
=
2
;i
<
6
;i
++
)
{

/*
---情况2:插在结点之后-----
*/

head
=
insertnode(head,head
->
next,list[i]);
printf(
"
插入结点之后:
"
);
printclist(head);
}

/*
---情况1:删除第一个结点---
*/

head
=
deletenode(head,head
->
next);
printf(
"
删除第一个结点:
"
);
printclist(head);

/*
--删除最后一个结点--
*/

printf(
"
删除最后一个结点:
"
);
head
=
deletenode(head,head);
printclist(head);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: