【线性表】-单链表-LinkList

/**************************
线性表的链式存储结构

功能代码包含:
1)单链表的数据结构定义
2)单链表的整表创建--初始化
3)单链表的整表删除
4)从单链表中获取元素
5)从单链表中插入元素
6)从单链表中删除元素

注意:代码不进行debug,只实现基本功能

Author:tmw
date:2018-3-9
**************************/
#include <stdio.h>
#include <stdlib.h>
#define error -65530
#define ok 0

/**单链表数据结构定义**/
typedef struct node
{
    int data;
    struct node *next;
}node;

typedef struct node *Linklist;

/**单链表整表的创建**/
//创建长度为n的单链表
void create_full_linklist( Linklist *L, int n )
{
    Linklist p;

    *L = (Linklist)malloc(sizeof(node));
    (*L)->next = NULL;

    int i;
    for( i = 0; i < n; i++ )
    {
        p = (Linklist)malloc(sizeof(node));
        p->data = i; //数据初始化
        //头插法
        p->next = (*L)->next;
        (*L)->next = p;
    }
}

/**单链表整表的删除**/
void delete_full_Linklist( Linklist *L )
{
    Linklist p,q;
    p = (*L)->next;

    while( p )
    {
        q = p->next;
        free(p);
        p = q;
    }
    (*L)->next = NULL;
}

/**从单链表中获取元素**/
/**获取单链表第i个位置上的元素**/
int getElement_from_Linklist( Linklist *L, int i )
{
    int j=1;
    Linklist p;

    p = (*L)->next;

    while( p && j < i)
    {
        p = p->next;
        j++;
    }
    /**第i个结点不存在的情况**/
    if( j > i || !p )
        return error;

    return p->data;
}

/**往单链表中第i个位置插入元素e**/
int insertElement_for_Linklist( Linklist *L, int i, int e )
{
    Linklist p;
    int j = 1;

    /**找位置i**/
    p = (*L)->next;
    while( p && j < i-1) //循环走完后,若找到,则p指向i-1的位置,接下来的元素只需插在p之后就行
    {
        p = p->next;
        j++;
    }
    if( !p || j > i-1 )
        return error;

    Linklist q;
    q = (Linklist)malloc(sizeof(node));
    q->data = e;
    q->next = p->next;
    p->next = q;
    return ok;
}

/**从单链表中删除第i个位置上的元素,并返回**/
int deleteElement_from_Linklist( Linklist* L, int i )
{
    int j = 1;
    Linklist p;
    p = (*L)->next;

    while( p && j < i-1 )
    {
        p = p->next;
        i++;
    }
    if( !p || i > j )
        return error;

    /**删除结点操作**/
    Linklist q;
    q = p->next;
    p->next = q->next;

    /**此时q指向第i个位置**/
    int e = q->data;

    free(q);

    return e;
}

 

梦想还是要有的,万一实现了呢~~~ヾ(◍°∇°◍)ノ゙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值