单链表的基本操作(初始化,增加,删除)

最近在看数据结构,练习单链表的基本操作,没什么难度,算是做个记录吧。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//单链表的初始化增删插 date 2015/3/27

//定义单链表
typedef struct Node{
    int data;
    struct Node * next;
}Node,* p_Node;

void init_Node(Node &*); //初始化一个结点为空的链表
void add_Node_from_head(p_Node  ,int );//从头部位置添加结点
void add_Node_in_pos(p_Node,int,int);//在指定位置添加结点
void delete_Node_in_pos(p_Node ,int);//在指定位置删除结点
int get_Node_length(p_Node);//得到链表的结点数
void show_Node(p_Node);//输出结点信息
int main(void)
{
    Node node;
    p_Node p  = &node;
    init_Node(p);
    add_Node_from_head(p,5);
    add_Node_from_head(p,3);
    add_Node_from_head(p,2);
    add_Node_in_pos(p,3,66);
    delete_Node_in_pos(p,1);
    show_Node(p);


    return 0;
}

void delete_Node_in_pos(Node * L ,int pos)
{
    p_Node p = L;
    int j = 0 ;
    while(p && j < pos - 1)
    {
        p = p->next;
        j++;
    }
    if(p == NULL || j > pos)
    {
        printf("pos错误");
        exit(-1);
    }
    p_Node delete_Node = p->next;
    p->next = delete_Node->next;
    free(delete_Node);
}

void add_Node_in_pos(Node * L,int pos,int val)
{
    int j = 0;
    p_Node p = L;
    while(p && j < pos - 1)
    {
        p = p->next;
        j++;
    }
    if(p == NULL || j > pos)
    {
        printf("pos错误");
        exit(-1);
    }
    p_Node newNode = (p_Node)malloc(sizeof(Node));
    newNode->data = val;
    newNode->next = p->next;
    p->next = newNode;

}
int get_Node_length(Node * L)
{
    int i = 0;
    if(NULL == L)
    {
        printf("不存在的链表");
        exit(-1);
    }
    while(L->next != NULL)
    {
        L = L->next;
        i++;
    }
    return i;

}
void show_Node(Node * L)
{
     p_Node p ;
     p = L->next;
     while(p != NULL)
     {
        printf("%d\n",p->data);
        p = p->next;
     }

}
void add_Node_from_head(Node * L ,int val)
{
    if(NULL == L || NULL == val)
    {
        printf("不存在的链表或数据");
        exit(-1);
    }
    p_Node p = (p_Node)malloc(sizeof(Node));
    if(NULL == p)
    {
        printf("申请内存空间失败\n");
        exit(-1);
    }
    p->data = val;
    p->next = L->next;
    L->next = p;
}

void init_Node(Node *& p)
{
    p = (p_Node)malloc(sizeof(Node));
    if(NULL == p)
    {
        printf("申请内存空间失败\n");
        exit(-1);
    }
    p->next = NULL;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值