2/23作业

1.loop_list.c

#include "loop_list.h"
//创建单向循环链表
loop_p creat_loop_list()
{
    loop_p K = (loop_p)malloc(sizeof(loop_list));
    if(K==NULL)
    {
        printf("空间申请成功\n");
    }
    K->len=0;
    K->next=K;
    return K;
}
//申请新结点
loop_p creat_node(datatype data)
{
    loop_p new=(loop_p)malloc(sizeof(loop_list));
    if(new==NULL)
    {
        printf("空间申请失败\n");
    }
    new->data=data;
    return new;
}

//判空
int loop_empty(loop_p K)
{
    if(K==NULL)
    {
        printf("链表为空\n");
        return -1;
    }
    return K->next==NULL?1:0;
}
    
//头插
void insert_head(loop_p K,datatype data)
{
    if(K==NULL)
    {
        printf("入参为空\n");
        return;
    }
    loop_p new=creat_node(data);
    new->next=K->next;

    K->next=new;

    K->len++;
}

//按位置插入
void insert_pos(loop_p K,datatype data,int pos)
{
    if(K==NULL)
    {
        printf("入参为空\n");
        return;
    }
    if(pos<=0||pos>K->len+1)
    {
        printf("位置不合理\n");
        return;
    }
    loop_p temp = K;
    for(int i=0;i<pos-1;i++)
    {
        temp=temp->next;
    }
    loop_p new=creat_node(data);
    new->next=temp->next;
    temp->next=new;
    K->len++;
}

//输出
void out_put(loop_p K)
{
    if(K==NULL)
    {
        printf("入参为空\n");
        return;
    }
    loop_p temp=K->next;
    /*for(int i=0;i<K->len;i++)
    {
        printf("%d->",temp->data);
        temp=temp->next;
    }*/
    while(temp != K)
    {
        printf("%d->",temp->data);
        temp=temp->next;
    }
    putchar(10);
}

//尾删
void del_tail(loop_p K)
{

    if(K==NULL)
    {
        printf("入参为空\n");
        return;
    }
    if(loop_empty(K))
    {
        printf("链表为空\n");
        return;
    }
    loop_p temp=K;
    while(temp->next->next !=K)
    {
        temp=temp->next;
    }
    loop_p del=temp->next;
    temp->next=K;
    free(del);
    K->len--;
}

//按位置删除
void del_pos(loop_p K,int pos)
{

    if(K==NULL)
    {
        printf("入参为空\n");
        return;
    }
    if(loop_empty(K))
    {
        printf("链表为空\n");
        return;
    }
    if(pos<=0||pos>K->len+1)
    {
        printf("位置不合理\n");
        return;
    }

    loop_p temp = K;
    for(int i=0;i<pos-1;i++)
    {
        temp=temp->next;
    }
    loop_p del=temp->next;
    temp->next=temp->next->next;
    free(del);
    K->len--;
}
2.loop_list.h

#ifndef __LOOP_LIST_H__
#define __LOOP_LIST_H__

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

typedef int datatype;
typedef struct loop_list
{
    union
    {
        int len;
        datatype data;
    };
    struct loop_list *next;
}loop_list,*loop_p;

//创建单向循环链表
loop_p creat_loop_list();
//创建结点
loop_p creat_node(datatype data);
//判空
int loop_empty(loop_p K);
//头插
void insert_head(loop_p K,datatype data);
//按位置插入
void insert_pos(loop_p K,datatype data,int pos);
//输出
void out_put(loop_p K);
//尾删
void del_tail(loop_p K);
//按位置删除
void del_pos(loop_p K,int pos);
#endif

2.main.c

#include "loop_list.h"
int main()
{
    loop_p K=creat_loop_list();
    insert_head(K,12);
    insert_head(K,56);
    insert_pos(K,45,2);
    insert_pos(K,100,3);
    out_put(K);
    printf("-----------\n");
    del_tail(K);
    out_put(K);    
    printf("-----------\n");
    del_pos(K,2);
    out_put(K);    


    return 0;
}

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值