Linked List C implement (2)

Linked List C implement (2)

 

#include"Head_Node.h" 

/************************************/
/*         判断链表是否有序         */
/************************************/
int Is_Sort(node *head)
{
    node 
*p,*pre;
    
int flag;
    pre
=head->next;
    p
=pre->next;
    flag
=pre->info>p->info?1:0;
    
while(p)
    {
        pre
=p;
        p
=p->next;
        
if(p)
        {
            
if(flag!=pre->info>p->info?1:0)
            {
                
return 0;
            }
        }
    }
    
return 1;


int main()
{
    node 
*head;
    
int flag;
    head
=Creat_Node();
    Print_Node(head);
    flag
=Is_Sort(head);
    
if(flag==1)
    {
        
printf("该链表有序!\n");
    }
    
else
    {
        
printf("该链表无序!\n");
    }
    
return 0;
}


  

#include"Head_Node.h"
/************************************/
/*          链表反序                */
/************************************/
void convert_Node(node 
*head)
{
    node 
*pre,*p=head->next;
    head
->next=NULL;
    
while(p)
    {
        pre
=p;
        p
=p->next;
        pre
->next=NULL;
        pre
->next=head->next;
        head
->next=pre;
    }
}
        
        
    
int main()
{
    node 
*head;
    head
=Creat_Node();
    Print_Node(head);
    convert_Node(head);
    Print_Node(head);
    
return 0;


#include"Head_Node.h" 

/************************************/
/*     将奇偶数按原相对顺序分开     */
/************************************/ 

node 
*Divide_Node(node *head1)
{
    node 
*head2,*pre,*p,*s;
    p
=head1->next;
    pre
=head1;
    head2
=(node*)malloc(sizeof(node));
    head2
->next=NULL;
    s
=head2;
    
while(p)
    {
        
if(p->info%2)
        {
            pre
->next=p->next;
            p
->next=s->next;
            s
->next=p;
            s
=p;
            p
=pre->next;
        }
        
else
        {
            pre
=p;
            p
=p->next;
        }
    }
    
return head2;


int main()
{
    node 
*head,*head2;
    head
=Creat_Node();
    Print_Node(head);
    head2
=Divide_Node(head);
    
printf("打印偶数链表\n");
    Print_Node(head);
    
printf("打印奇数链表\n");
    Print_Node(head2);
    
return 0;


  

#include"Head_Node.h" 

/*******************************/
/*删除所有大于x而不大于Y的结点 */
/*******************************/ 

void Delete_X_y(node 
*head,int x,int y)
{
    node 
*pre=head,*p=head->next;
    
if(x>=y)
    {
        
printf("不符合条件!\n");
        
return ;
    }
    
while(p)
    {
        
if(p->info>x&&p->info<=y)
        {
            pre
->next=p->next;
            free(p);
            p
=pre->next;
        }
        
else
        {
            pre
=p;
            p
=p->next;
        }
    }


int main()
{
    node 
*head;
    
int x,y;
    head
=Creat_Node();
    
printf("输出x,y的值:");
    scanf(
"%d%d",&x,&y);
    Print_Node(head);
    Delete_X_y(head
,x,y);
    Print_Node(head);
    
return 0;


#include"Head_Node.h"
/****************************************************/
/*                 直接插入排序                     */
/****************************************************/ 

void Insert_Sort(node 
*head)
{
    node 
*p,*pre,*s,*r;
    p
=head->next;
    head
->next=NULL;
    
while(p)
    {
        pre
=p->next;
        r
=head;
        s
=head->next;
        
while(s&&s->info<p->info)
        {
            r
=s;
            s
=s->next;
        }
        p
->next=r->next;
        r
->next=p;
        p
=pre;
    }
}
         

        
int main()
{
    node 
*head;
    head
=Creat_Node();
    Print_Node(head);
    Insert_Sort(head);
    Print_Node(head);
    
return 0;


  

#include"head_node.h"
node* merge_two_List(node *head1,node *head2)
{
    node 
*head,*s,*p,*r;
    p
=head1->next;
    s
=head2->next;
    head
=(node*)malloc(sizeof(node));
    head
->next=NULL;
    r
=head->next;
    
while(s&&p)
    {
        
if(p->info<s->info)
        {
            head1
->next=p->next;
            p
->next=NULL;
            r
->next=p;
            r
=r->next;
            p
=head1->next;
        }
        
else
        {
            head2
->next=s->next;
            s
->next=NULL;
            r
->next=s;
            r
=r->next;
            s
=head2->next;
        }
    }
    
while(s)
    {
        head2
->next=s->next;
        s
->next=NULL;
        r
->next=s;
        r
=r->next;
        s
=head2->next;
    }
    
while(p)
    {
        head1
->next=p->next;
        p
->next=NULL;
        r
->next=p;
        r
=r->next;
        p
=head1->next;
    }
    
//free(head1);
    
//free(head2);
    
return head;


int main()
{
    node 
*head,*head1,*head2;
    head1
=Creat_Node();
    head2
=Creat_Node();
    head
=merge_two_List(head1,head2);
    Print_Node(head);
    
return 0;

posted @ 2007-08-07 11:07  RayG  阅读(378)  评论(2编辑  收藏  举报