链表删除:链表的建立、插入和删除(2)



t = p 2 ;
}
e l s e
{ /*插入位置在表中* /
p 3 - > n e x t = p 1 ;
p 1 - > n e x t = p 2 ;
}
e l s e
{ /*插入位置在表尾* /
p 2 - > n e x t = p 1 ;
p 1 - > n e x t = N U L L ;
}
}
r e t u r n ( h e a d ) ; / * 返回链表头指针* /
}
3. 例子[例7 - 7 ]
创建包含学号、姓名节点单链表其节点数任意个表以学号为序低学号在前高学号在后以输入姓名为空作结束在此链表中要求删除个给定姓名节点并插入个给定学号和姓名节点
# \"slib.h\"
# \"malloc. h\"
suct node /*节点数据结构* /
{
num;
char s[20];
suct node *next;
} ;
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
( )
{
/ *声明* /
suct node *creat;
suct node *insert;
suct node *delet;
void pr( );
suct node *head;
char s[20];
n;
head=NULL; /*做空表* /
head=creat (head); / *创建以head 为头链表* /
p r i n t ( h e a d ) ;/ *输出节点* /
prf(\"\\n input inserted num,name:\\n\");
gets(s); /*输入学号* /
n=atoi (s);
gets(s); /*输入姓名* /
head=insert (head, s, n); 将/*节点插入链表*/
pr (head); / *输出节点*/
prf(\"\\n input deleted name:\\n\");
gets(s); /*输入被删姓名* /
head=delet(head,s); /调*用删除节点*/
pr (head); /*输出节点* /
r e t u r n ;
}
/ * * * * * * * * * * * * * * * * * * * * * * /
/ * * * 创建链表* * * * * * * * * * * * /
suct node *creat(suct node *head)
{
char temp[30];
suct node *pl,*p2;
pl=p2=(suct node*) malloc((suct node));
prf (\"input num, name: \\n;\")
prf(\"exit:double times Enter!\\n\");
g e t s ( t e m p ) ;
gets (p1->s);
pl->num=atoi (temp);
p l - > n e x t = N U L L ;
while (slen (pl->s)>0
{
(headNULL) head=pl;
p2->next=p1;
P 2 = p l ;
pl=(suct node *)malloc((suct node));
prf (\"input num, name: \\n\");
prf(\"exit:double times Enter!\\n\");
g e t s ( t e m p ) ;
gets(pl ->s);
p1->num=atoi (temp);
P 1 - > n e x t = N U L L ;
}
head;
}
/ * * * * * * * * * * * * * * * * * * * * /
/ * * * * * * * * * * 插入节点* * * * * * * * * * /
suct node *insert (head, ps,n);
suct node *head;
char *ps;
n;
{
suct node *pl,*p2,*p3;
p1=(suct node*)malloc((suct node));
scpy (p1->s, ps);
p 1 - > n u m = n ;
p 2 = h e a d ;
i f ( h e a d = = N U L L )
{
h e a d = p l ; p l - > n e x t = N U L L ;
}
e l s e
{
while (n>p2->num&&p2->next!=NULL)
{
p 3 = P 2
p 2 = p 2 - > n e x t ;
}
(n<=p2->num)
(headp2)
{
h e a d = p l ;
p l - > n e x t = p 2 ;
}

{
p 3 - > n e x t = p l ;
p l - > n e x t = p 2 ;
}

{
p 2 - > n e x t = p l ;
p l - > n e x t = N U L L ;
}
}
r e t u r n ( h e a d ) ;
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * /
/ * * * * * 删除节点* * * * * * * * * * * * * /
suct node *delet (head, ps)
suct node *head;
char *ps;
{
suct node *temp,*p;
t e m p = h e a d ;
(headNULL)
prf(\"\\nList is null!\\n\");

{
t e m p = h e a d ;
while (scmp(temp->s,ps)!=O&&temp->next!=NULL)
{
p = t e m p ;
t e m p = t e m p - > n e x t ,
}
i f ( s t r c m p ( t e m p - > s t r , p s t r ) = = 0 )
{
(temp head)
{
h e a d = h e a d - > n e x t ;
f r e e ( t e m p ) ;
}

{
p->next =temp->next;
prf(\"delete sing :%s\\n\",temp->s);
f r e e ( t e m p ) ;
}
}
prf(\"\\nno find sing!\\n\");
}
(head);
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/ * * * * * * * * * * 链表各节点输出* * * * * * * * * * /
void pr (suct node *head)
{
suct node *temp;
t e m p = h e a d ;
prf(\"\\n output sings:\\n\");
while (temp!=NULL)
{
p r i n t f ( \" \\ n % d - - - - % s \\ n \" , t e m p - > n u m t e m p - > s t r ) ;
t e m p = t e m p - > n e x t ;
}
r e t u r n ;
}
\" width=195>
}
}
r e t u r n ( h e a d ) ;
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * /
/ * * * * * 删除节点* * * * * * * * * * * * * /
suct node *delet (head, ps)
suct node *head;
char *ps;
{
suct node *temp,*p;
t e m p = h e a d ;
(headNULL)
prf(\"\\nList is null!\\n\");

{
t e m p = h e a d ;
while (scmp(temp->s,ps)!=O&&temp->next!=NULL)
{
p = t e m p ;
t e m p = t e m p - > n e x t ,
}
i f ( s t r c m p ( t e m p - > s t r , p s t r ) = = 0 )
{
(temp head)
{
h e a d = h e a d - > n e x t ;
f r e e ( t e m p ) ;
}

{
p->next =temp->next;
prf(\"delete sing :%s\\n\",temp->s);
f r e e ( t e m p ) ;
}
}


prf(\"\\nno find sing!\\n\");
}
(head);
}
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/ * * * * * * * * * * 链表各节点输出* * * * * * * * * * /
void pr (suct node *head)
{
suct node *temp;
t e m p = h e a d ;
prf(\"\\n output sings:\\n\");
while (temp!=NULL)
{
p r i n t f ( \" \\ n % d - - - - % s \\ n \" , t e m p - > n u m t e m p - > s t r ) ;
t e m p = t e m p - > n e x t ;
}
r e t u r n ;
}
\" width=195>

Tags:  链表的建立 建立链表 链表的删除 链表删除

延伸阅读

最新评论

发表评论