数据结构之链表

1、头文件

#ifndef _LINKEDLIST_H
#define _LINKEDLIST_H

typedef int data_t;

typedef struct linklist
{
    data_t data;
    struct linklist* next;
}lk_node, *lk_pnode;

lk_pnode create(void);

int len_linklist(lk_pnode H);

int insert_linklist(lk_pnode H,int location,data_t data);

int del_linklist(lk_pnode H,int location);

int delall_linklist(lk_pnode);

int cover_linklist(lk_pnode,int location,data_t data);

int locquery_linklist(lk_pnode H,int location);

int destory_linklist(lk_pnode* H);

void show_linklist(lk_pnode H);

int updown_linklist(lk_pnode H);

int valquery_linklist(lk_pnode H,data_t data);

int sort_linklist(lk_pnode H);

#endif

2、函数.C文件

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

//创建---------------------------------------------------
lk_pnode create(void)
{
    lk_pnode temp = (lk_pnode)malloc(sizeof(lk_node));
    if( NULL==temp )
        return NULL;
    temp->next = NULL;
    return temp;
}
//覆盖--------------------------------------------------
int cover_linklist(lk_pnode H,int location,data_t data)
{
    if( NULL == H)
        return -1;
    if( location<0 || location>len_linklist(H) )
        return -2;
    
    while(location)
    {
        H = H->next;
        location--;
    }
    
    H->next->data = data;
    return 0;
}
//求链表长度---------------------------------------------------
int len_linklist(lk_pnode H)
{
    if( NULL == H )
        return -1;
    int len = 0;
    while( H->next != NULL )
    {
        H = H->next;
        len++;
    }
    return len;
}
//删除---------------------------------------------------
int del_linklist(lk_pnode H,int location)
{
    if(NULL == H)
        return -1;
    if(location < 0 || location > len_linklist(H))
        return -2;
    
    while(location)
    {
        H=H->next;
        location--;
    }
    lk_pnode b = H->next;
    H->next = H->next->next;
    free(b);
    return 0;
}
//清空----------------------------------------------------
int delall_linklist(lk_pnode H)
{
    if(NULL==H)
        return -1;
    if(0 == len_linklist(H))
        return -2;
    
    while(H->next != NULL)
    {
        lk_pnode temp = H->next;
        H->next = temp->next;
        free(temp);
    }
    return 0;
}
//插入----------------------------------------------------
int insert_linklist(lk_pnode H,int location,data_t data)
{
    if( NULL == H )
        return -1;
    if( location < 0 || location > len_linklist(H) )
        return -2;
    
     while( location-- ) // location-1 ?
        H = H->next;
     lk_pnode temp = (lk_pnode)malloc(sizeof(lk_node));
    temp->next = H->next;
    H->next = temp;
    temp->data = data;
    return 0;
}
//按位查询---------------------------------------------------
int locquery_linklist(lk_pnode H,int location)
{
    if(NULL==H)
        return -1;
    if(location<0 || location> len_linklist(H))
        return -2;
    while(location)
    {
        H=H->next;
        location--;
    }
    return H->next->data;
}

//销毁----------------------------------------------------
int destory_linklist(lk_pnode* H)
{
    if(NULL == H)
        return 0;
    free(*H);
    return 0;
}
//罗列-----------------------------------------------------
void show_linklist(lk_pnode H)
{
    while(H->next != NULL)
    {
        H=H->next;
        printf("%d  ",H->data);
    }
    puts("");
}
//颠倒-----------------------------------------------------
int updown_linklist(lk_pnode H)
{
    if(NULL==H)
        return -1;
    if(0 == len_linklist(H))
        return -2;
    lk_pnode E = H->next;
    H->next=NULL;
    while(E)
    {
        lk_pnode B = E;
        E=E->next;
        B->next=H->next;
        H->next=B;
    }
    return 0;
}
//查找数据--------------------------------------------------------
int valquery_linklist(lk_pnode H,data_t data)
{
        if(NULL==H)
            return -1;
    
        int scor = 0;
        int dex = 0;
    
        while(H->next != NULL)
        {
            H=H->next;
            if(H->data == data)
            {
                scor++;
                printf("下标%d的值为%d\n",dex,data);
            }
            dex++;
        }
    
        if( 0 == scor )
            return -2;
            return 0;
}
//排序,从小到大----------------------------------------------------------
int sort_linklist(lk_pnode H)
{
    if(NULL==H)
        return -1;
    if(0 == len_linklist(H))
        return -2;

    lk_pnode B = H->next;
    lk_pnode E = B;
    lk_pnode temp = H;
    H->next = NULL;
    
    while(B)
    {
        E = B;
        B = B->next;
        
        temp = H;
        while(temp->next)
        {
            if(temp->next->data > E->data)
                break;
            temp = temp->next;
        }
    
        E->next = temp->next;
        temp->next = E;
    }

    
 return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值