数据结构复习

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int Datatype;
typedef struct node 
{
      Datatype data;
      struct node *next;
}linknode;


linknode*create_empty_linklist()
{
     linknode*head=NULL;
     head = (linknode*)malloc(sizeof(linknode));
     if(NULL==head)
     {
         printf("fail to malloc\n");
         return NULL;
     }
     bzero(head,sizeof(linknode));
     return head;
};

int is_empty_linklist(linknode*head)
{
     return head->next==NULL ?1 :0;
}

void insert_head_linklist(linknode *head,Datatype data)
{
    linknode *temp = NULL;
    temp = (linknode*)malloc(sizeof(linknode));
    if(NULL == temp)
    {
       printf("fail to malloc\n");
       return;
    }
    temp->data=data;
    temp->next=head->next;
    head->next=temp;
    return;
}

void insert_tail_linklist(linknode*head,Datatype data)
{
    linknode*temp=NULL;
    temp=(linknode*)malloc(sizeof(linknode));
    if(NULL==temp)
    {
        printf("fail to malloc\n");
        return ;
    }
    temp->data=data;

    linknode*p=head;
    while(p->next!=NULL)
    {
       p=p->next;
    }

    temp->next=p->next;
    p->next=temp;
    return;
}

void printf_linklist_data(linknode*head)
{
    linknode*p=NULL;
    p=head;
    while(p->next!=NULL)
    {
        printf("%d ",p->next->data);
        p=p->next;
    }
    putchar('\n');
    return;
}

void insert_order_linklist(linknode*head,Datatype data)
{    
    linknode*temp=NULL;
    temp=(linknode*)malloc(sizeof(linknode));
    if(NULL==temp)
    {
        printf("fail to malloc\n");
        return ;
    }
    temp->data=data;

    linknode*p=head;
    while(p->next!=NULL && temp->data > p->next->data)
    {
        p=p->next;
    }
    temp->next=p->next;
    p->next=temp;
    return;
}

void delete_assign_linklist(linknode*head,Datatype data)
{
    linknode *p=head;
    linknode *q=NULL;
    while(p->next!=NULL)
    {
       if(p->next->data==data)
           break;
       p=p->next;
    }
    q=p->next;
    p->next=p->next->next;
    free(q);
    q=NULL;
    return ;
}

void delete_samedata_linklist(linknode*head,Datatype data)
{
       linknode*p=head;
       linknode*q=NULL;
       while(p->next!=NULL)
       {
         if(p->next->data==data)
         {
          q=p->next;
          free(q);
          p->next=p->next->next;
         }else{
          p=p->next;
         }
       }
       return ;
}

void reverse_linklist(linknode*head)
{
    linknode*p=head->next->next;
    head->next->next=NULL;
    while(p!=NULL)
    {
        insert_head_linklist(head,p->data);
        p=p->next;
    }
    return;
}




void clean_all_node_linklist(linknode*head)
{
    linknode*p=head;
    linknode*q=NULL;
    while(p!=NULL)
    {
        printf_linklist_data(p);
        q=p->next;
        free(p);
        p=NULL;
        p=q;
    }
    return;
}

int main(int argc, const char *argv[])
{
    linknode*head=NULL;
    Datatype data;
    int i=0;
    head=create_empty_linklist();

    printf("please input 5 num:");
    for(i=0;i<5;i++)
    {
       scanf("%d",&data);
       insert_head_linklist(head,data);
    }
    while(getchar()!='\n');//清缓存
    printf_linklist_data(head);

/*
    clean_all_node_linklist(head);


    reverse_linklist(head);
    printf_linklist_data(head);

    delete_assign_linklist(head,3);
    printf_linklist_data(head);

    delete_samedata_linklist(head,2);
    printf_linklist_data(head);

    
   
    printf("please input 5 num:");
    for(i=0;i<5;i++)
    {
       scanf("%d",&data);
       insert_tail_linklist(head,data);
    }
    printf_linklist_data(head);
    

    insert_order_linklist(head,3);
    printf_linklist_data(head);
*/
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屁小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值