Linked List C implement (2)

本文介绍了几种链表的基本操作,包括判断链表是否有序、链表的反序、分离奇偶节点、删除指定范围内的节点及直接插入排序等。通过具体的C语言实现,帮助读者深入理解链表这一数据结构。
Linked List C implement (2)

 

None.gif#include"Head_Node.h" 
None.gif

None.gif
/************************************/
None.gif
/*         判断链表是否有序         */
None.gif
/************************************/
None.gif
int Is_Sort(node *head)
None.gif{
None.gif    node 
*p,*pre;
None.gif    
int flag;
None.gif    pre
=head->next;
None.gif    p
=pre->next;
None.gif    flag
=pre->info>p->info?1:0;
None.gif    
while(p)
None.gif    {
None.gif        pre
=p;
None.gif        p
=p->next;
None.gif        
if(p)
None.gif        {
None.gif            
if(flag!=pre->info>p->info?1:0)
None.gif            {
None.gif                
return 0;
None.gif            }
None.gif        }
None.gif    }
None.gif    
return 1;
None.gif
None.gif
None.gif
int main()
None.gif{
None.gif    node 
*head;
None.gif    
int flag;
None.gif    head
=Creat_Node();
None.gif    Print_Node(head);
None.gif    flag
=Is_Sort(head);
None.gif    
if(flag==1)
None.gif    {
None.gif        
printf("该链表有序!\n");
None.gif    }
None.gif    
else
None.gif    {
None.gif        
printf("该链表无序!\n");
None.gif    }
None.gif    
return 0;
None.gif}
None.gif
None.gif
None.gif  
None.gif
None.gif
#include"Head_Node.h"
None.gif
/************************************/
None.gif
/*          链表反序                */
None.gif
/************************************/
None.gifvoid convert_Node(node 
*head)
None.gif{
None.gif    node 
*pre,*p=head->next;
None.gif    head
->next=NULL;
None.gif    
while(p)
None.gif    {
None.gif        pre
=p;
None.gif        p
=p->next;
None.gif        pre
->next=NULL;
None.gif        pre
->next=head->next;
None.gif        head
->next=pre;
None.gif    }
None.gif}
None.gif        
None.gif        
None.gif    
None.gif
int main()
None.gif{
None.gif    node 
*head;
None.gif    head
=Creat_Node();
None.gif    Print_Node(head);
None.gif    convert_Node(head);
None.gif    Print_Node(head);
None.gif    
return 0;
None.gif
None.gif
None.gif
#include"Head_Node.h" 
None.gif

None.gif
/************************************/
None.gif
/*     将奇偶数按原相对顺序分开     */
None.gif
/************************************/ 
None.gif
None.gifnode 
*Divide_Node(node *head1)
None.gif{
None.gif    node 
*head2,*pre,*p,*s;
None.gif    p
=head1->next;
None.gif    pre
=head1;
None.gif    head2
=(node*)malloc(sizeof(node));
None.gif    head2
->next=NULL;
None.gif    s
=head2;
None.gif    
while(p)
None.gif    {
None.gif        
if(p->info%2)
None.gif        {
None.gif            pre
->next=p->next;
None.gif            p
->next=s->next;
None.gif            s
->next=p;
None.gif            s
=p;
None.gif            p
=pre->next;
None.gif        }
None.gif        
else
None.gif        {
None.gif            pre
=p;
None.gif            p
=p->next;
None.gif        }
None.gif    }
None.gif    
return head2;
None.gif
None.gif
None.gif
int main()
None.gif{
None.gif    node 
*head,*head2;
None.gif    head
=Creat_Node();
None.gif    Print_Node(head);
None.gif    head2
=Divide_Node(head);
None.gif    
printf("打印偶数链表\n");
None.gif    Print_Node(head);
None.gif    
printf("打印奇数链表\n");
None.gif    Print_Node(head2);
None.gif    
return 0;
None.gif
None.gif
None.gif  
None.gif
None.gif
#include"Head_Node.h" 
None.gif

None.gif
/*******************************/
None.gif
/*删除所有大于x而不大于Y的结点 */
None.gif
/*******************************/ 
None.gif
None.gifvoid Delete_X_y(node 
*head,int x,int y)
None.gif{
None.gif    node 
*pre=head,*p=head->next;
None.gif    
if(x>=y)
None.gif    {
None.gif        
printf("不符合条件!\n");
None.gif        
return ;
None.gif    }
None.gif    
while(p)
None.gif    {
None.gif        
if(p->info>x&&p->info<=y)
None.gif        {
None.gif            pre
->next=p->next;
None.gif            free(p);
None.gif            p
=pre->next;
None.gif        }
None.gif        
else
None.gif        {
None.gif            pre
=p;
None.gif            p
=p->next;
None.gif        }
None.gif    }
None.gif
None.gif
None.gif
int main()
None.gif{
None.gif    node 
*head;
None.gif    
int x,y;
None.gif    head
=Creat_Node();
None.gif    
printf("输出x,y的值:");
None.gif    scanf(
"%d%d",&x,&y);
None.gif    Print_Node(head);
None.gif    Delete_X_y(head
,x,y);
None.gif    Print_Node(head);
None.gif    
return 0;
None.gif
None.gif
None.gif
#include"Head_Node.h"
None.gif
/****************************************************/
None.gif
/*                 直接插入排序                     */
None.gif
/****************************************************/ 
None.gif
None.gifvoid Insert_Sort(node 
*head)
None.gif{
None.gif    node 
*p,*pre,*s,*r;
None.gif    p
=head->next;
None.gif    head
->next=NULL;
None.gif    
while(p)
None.gif    {
None.gif        pre
=p->next;
None.gif        r
=head;
None.gif        s
=head->next;
None.gif        
while(s&&s->info<p->info)
None.gif        {
None.gif            r
=s;
None.gif            s
=s->next;
None.gif        }
None.gif        p
->next=r->next;
None.gif        r
->next=p;
None.gif        p
=pre;
None.gif    }
None.gif}
None.gif         
None.gif
None.gif        
None.gif
int main()
None.gif{
None.gif    node 
*head;
None.gif    head
=Creat_Node();
None.gif    Print_Node(head);
None.gif    Insert_Sort(head);
None.gif    Print_Node(head);
None.gif    
return 0;
None.gif
None.gif
None.gif  
None.gif
None.gif
#include"head_node.h"
None.gif
node* merge_two_List(node *head1,node *head2)
None.gif{
None.gif    node 
*head,*s,*p,*r;
None.gif    p
=head1->next;
None.gif    s
=head2->next;
None.gif    head
=(node*)malloc(sizeof(node));
None.gif    head
->next=NULL;
None.gif    r
=head->next;
None.gif    
while(s&&p)
None.gif    {
None.gif        
if(p->info<s->info)
None.gif        {
None.gif            head1
->next=p->next;
None.gif            p
->next=NULL;
None.gif            r
->next=p;
None.gif            r
=r->next;
None.gif            p
=head1->next;
None.gif        }
None.gif        
else
None.gif        {
None.gif            head2
->next=s->next;
None.gif            s
->next=NULL;
None.gif            r
->next=s;
None.gif            r
=r->next;
None.gif            s
=head2->next;
None.gif        }
None.gif    }
None.gif    
while(s)
None.gif    {
None.gif        head2
->next=s->next;
None.gif        s
->next=NULL;
None.gif        r
->next=s;
None.gif        r
=r->next;
None.gif        s
=head2->next;
None.gif    }
None.gif    
while(p)
None.gif    {
None.gif        head1
->next=p->next;
None.gif        p
->next=NULL;
None.gif        r
->next=p;
None.gif        r
=r->next;
None.gif        p
=head1->next;
None.gif    }
None.gif    
//free(head1);
None.gif    
//free(head2);
None.gif    
return head;
None.gif
None.gif
None.gif
int main()
None.gif{
None.gif    node 
*head,*head1,*head2;
None.gif    head1
=Creat_Node();
None.gif    head2
=Creat_Node();
None.gif    head
=merge_two_List(head1,head2);
None.gif    Print_Node(head);
None.gif    
return 0;
None.gif
None.gif

转载于:https://www.cnblogs.com/nickong/archive/2007/08/07/845891.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值