1209带表头节点的单链表和循环链表

21 篇文章 0 订阅
6 篇文章 0 订阅

单链表

#include <stdio.h>
#include<stdlib.h>

#define Mac_OK 1
#define Mac_ERR 0

struct node
{
    int num;
    struct node * next;
};

typedef struct node Node;
typedef struct node * Link;

int is_malloc_ok(Link new_node)
{
    if(new_node == NULL)
    {
        printf("malloc error ! \n");
        return Mac_ERR;
    }
    else
    {
        return Mac_OK;
    }
}

void creat_link(Link *head)
{
    
    *head = (Link) malloc (sizeof(Node));
    (*head) -> next = NULL;
    printf("piz=======creatlink\n");
}

void creat_node( Link *new_node ,int i)
{
    int num = 0;
    *new_node = (Link) malloc (sizeof(Node));
    while(is_malloc_ok(*new_node) == Mac_ERR)
    {
        *new_node = (Link) malloc (sizeof(Node));
         num++;
        if(num == 10)
        {
            printf("num = %d\n", num);
            goto pool;
        }
    }
    (* new_node) -> num = i;
pool:
    if(num >= 10)
    {
        printf("Malloc error!_0_creat\n");
        exit(-1);
   }
    printf("new_node = %d\n",(*new_node) -> num);   
   // printf("plz========creatnode\n");
}



void insert_node_head(Link head, Link new_node )
{
    new_node -> next = head -> next;
    head -> next = new_node;
}

void insert_node_tail(Link head , Link new_node)
{
    Link p ;
    p = head;
    while(p -> next != NULL)
    {
        p = p -> next;
    }
    p -> next = new_node;
    new_node -> next = NULL;
}

void insert_node_mid_front(Link head , Link new_node , int num_loc)
{
    Link p;
    Link q;
    Link ptr;
    ptr = p = q = head -> next;
    if (p == NULL)
    {
        ptr = new_node;
        new_node -> next = NULL;
    }
    else
    {
        while((p -> num != num_loc) && (p -> next != NULL))
        {
            q = p;
            p = p -> next;
        }
        if(p == ptr)
        {
            new_node -> next = ptr;
            ptr = new_node;
        }
        else if((p -> next == NULL) && (p -> num != num_loc))
        {
            p -> next = new_node;
            new_node -> next = NULL;
        }
        else 
        {
            q -> next = new_node;
            new_node -> next = p;
        }
    }
}


void node_del(Link head,int num_val)
{
    Link q;
    Link p;
    p = q = head -> next;
    if(p == NULL)
    {
        printf("empty links \n");
    }
    else
    {
        while(p -> num != num_val && p -> next != NULL)
        {
            q = p ;
            p = p -> next;
        }
        if(p -> num == num_val)
        {
            free(p);
            p = p -> next;
        }
        else if(p -> next == NULL && p -> num != num_val)
        {
            printf("not found \n");
        }
        else 
        {  
            q -> next  = p -> next;
            free(p);
        }
    }
     
}

void display(Link head)
{
    int i = 0;
    Link p;
    p = head -> next;
    if(p == NULL)
    {
        printf("the link is empty!\n");
    }
    else
    {
        while(p != NULL)
        {
            printf("num = %d\n",p -> num);
            p = p -> next;
            i++;
            if(i == 10)
            {
                return;
            }
        }
    }
}

void print_star()
{
    printf("|*****************************|");
    printf("\n");
}

void release_link(Link head)
{
    Link p;
    p = (head -> next);
    if (p == NULL)
    {
        printf("the link is empty !\n");
    }
    else
    {
        while(p -> next != NULL)
        {
            free(p);
            p = p -> next;
        }
    }
    printf("release complete\n");
}

void reorder_link(Link head)
{
    Link p1 , p2 , p3;
    Link ptr;
    ptr = p1 = p2 = p3 = head -> next;
    if(ptr  == NULL)
    {
        printf("link is empty");
        return;
    }
    p2 = ptr -> next;
    if(p2 -> next == NULL)
        {
            p2 -> next = p1;
            p1 -> next = NULL;
            ptr = p2;
            return;
        }
    p3 = p2 -> next;
    while(p3 -> next != NULL)
    {
        p2 -> next = p1;
        p1 = p2;
        p2 = p3;
        p3 = p3 -> next;
    }
    p2 -> next = p1;
    p3 -> next = p2;
    ptr -> next = NULL;
    ptr -> next = p3;
    return;
        
}
int main()
{
    Link head = NULL;
    Link new_node = NULL;
    Link first_node = NULL;
    int i;
    int num_loc;
    int num_val;

    printf("plz input the num location:\n");
    scanf("%d", &num_loc);
    printf("plz input the num value:\n");
    scanf("%d", &num_val);

    creat_link(&head);

    for(i = 1 ; i < 9 ; i++)
    {
        creat_node(&new_node , i);
        printf("new_node = %d\n",new_node -> num);
        insert_node_head(head , new_node);
    }
    display(head);
    


    printf("plz input a num to delate :\n");
    scanf("%d",&num_val);
    node_del(head , num_val);
    display(head);

    release_link(head);
    free(head);

    return 0;
}

循环链表

#include <stdio.h>
#include <stdlib.h>

#define Mac_ok 1
#define Mac_err 0

struct node
{
    int num;
    struct node * next;
};
typedef struct node Node;
typedef struct node * Link;

void creat_link(Link *head)
{
    *head = (Link)malloc(sizeof(Node)) ;
    (*head) -> next = *head;
}

int is_malloc(Link new_node)
{
    if(new_node == NULL)
    {
        printf("Malloc error!\n");
        return Mac_err;
    }
    else
    {
        return Mac_ok;
    }
}

void creat_node(Link *new_node, int i)
{
    int num = 0;
    *new_node = (Link)malloc(sizeof(Node));
    while(is_malloc(*new_node) == Mac_err)
    {
        *new_node = (Link)malloc(sizeof(Node));
        num++;
        if(num == 10)
        {
            goto pool;
        }
    }
    (*new_node) -> num = i;
pool:
    {
        if(num >= 10)
        {
            printf("Malloc error!_creat node\n");
            exit (-1);
        }
    }
}

void insert_front(Link head , Link new_node)
{
    new_node -> next = head -> next;
    head -> next = new_node;
}

void display(Link head)
{
    Link p ;
    p = head -> next;
    if(p == head)
    {
        printf("The link is empty!\n");
        return;
    }
    while(p != head)
    {
        printf("node num = %d\n",p -> num);
        p = p-> next;
    }
}

void del_node(Link head , int num_val)
{
    Link p , q;
    p = q = head -> next;
    if(p == head)
    {
        printf("The link is empty!\n");
        return;
    }
    while(p -> num != num_val && p -> next != head)
    {
        q = p ; 
        p = p -> next;
    }
    if((p -> next == head) &&(p -> num == num_val))
    {
        printf("Not found!\n");
    }
    else
    {
        q -> next = p -> next;
        free(p);
    }
}

void insert_midfront(Link head , Link new_node , int num_loc)
{
    Link p , q;
    p = q = head -> next;
    if(p == head)
    {
        p = new_node;
        new_node -> next = head;
        return ;
    }
    while((p -> num != num_loc) && (p -> next != head))
    {
        q = p ;
        p = p -> next;
    }
    if((p -> next == head)&&(p -> num != num_loc))
    {
        p -> next = new_node;
        new_node -> next = head;
    }
    else
    {
        q -> next = new_node;
        new_node -> next = p;
    }
    return;
}

void release(Link *head)
{
    Link  p ;   
    p = *head;
    if(p -> next == *head)
    {
        printf("Empty Link\n");
        return ;
    }
    p = p -> next;
    while(p != *head)
    {
        *head = p -> next;
        free(p);
        p = *head;
    }
    free(*head);
    p = NULL;
    printf("release complete!\n");
}

void print_star()
{
    printf("******************************\n");
}

int main()
{
    int i ;
    Link new_node = NULL;
    Link head = NULL;
    int num_val = 0;
    int num_loc = 0;
    creat_link(&head);
    for(i = 0; i < 10; i ++)
    {
        creat_node(&new_node , i);
        insert_front(head , new_node);
    }
    display(head);
    
    print_star();

    printf("plz input loc &val\n");
    scanf("%d",&num_loc);
    scanf("%d",&num_val);
    creat_node(&new_node , num_val);
    insert_midfront(head , new_node , num_loc);
    display(head);
    release(&head);
    display(head);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值