链表的基础

一、链表创建

  链表主要有三种形式,包括单链表、双链表和循环链表。

  单链表每个节点只包含一个后驱指针,双链表节点同时包含一个前驱指针和一个后驱指针,循环链表的尾节点的后驱指向头节点。

  代码如下:

 

/*单链表节点结构*/
typedef
struct NodeType
{
char elem;
NodeType
*next;
}Node;


/*双链表节点结构*/
typedef
struct DNodeType
{
char elem;
DNodeType
*next;
DNodeType
*prev;
}DNode;
/*
创建链表
*/
Node
* CreateList(Node *head)
{
if(NULL == head)//分配头节点空间
head=(Node*)malloc(sizeof(Node)),
head
->next=NULL;

Node
*current=head , *temp;
char ch;

while(1)
{
cout
<<"/n input elem:";
cin
>>ch;
if('#' == ch) /*#结束输入*/
break;
temp
=(Node *) malloc ( sizeof(Node) );
temp
->elem=ch;
temp
->next=NULL;
current
->next=temp; /*当前节点的后驱指向新节点*/
current
=temp; /*当前节点为链表尾节点*/

}

return head;
}
/*插入节点*/

Node
*InsertNode(Node *head , char elem)
{
if( NULL == head || NULL == elem )
return head;

Node
*current=head->next; /*当前节点*/
Node
*prev=head; /*前驱节点*/
Node
*temp; /*过渡节点*/

while(current) /*移动至尾节点*/
{
prev
=current;
current
=current->next;
}

temp
=(Node*) malloc( sizeof(Node) );
temp
->elem=elem;
temp
->next=NULL;
prev
->next=temp; /*尾节点的后驱指向新节点*/

return head;

}
/*删除节点*/
Node
*DeleteNode(Node *head,char elem)
{
if(NULL == head || NULL == elem)
return head;
if(NULL == head->next)
return head;

Node
*prev,*current;
prev
=head;
current
=head->next;

while(current)
{
if(current->elem == elem) /*匹配节点元素*/
{
prev
->next=current->next; /*前驱节点的后驱指向当前节点的下一个节点*/
free(current);
/*释放当前节点*/
return head;
}
prev
=current;
current
=current->next; /*移动至下一个节点*/
}

return head;

}
/*
输出链表
*/
void PrintList(Node *head)
{
Node
* current=head->next;
cout
<<"/n List are:";
while(NULL != current)
{
if(NULL != current->elem)
cout
<<setw(5)<<current->elem;
current
=current->next;
}

cout
<<"/n";
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值