栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单链表实现及操作 数据结构C语言版

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单链表实现及操作 数据结构C语言版

单链表实现及操作
    • 初始定义
    • 单链表创建并初始化
      • 头插法
      • 尾插法
    • 获取单链表的长度
    • 单链表遍历输出
    • 判断是否为空
    • 获取元素操作
    • 删除操作
    • 插入操作
    • 整表删除

相关操作的函数传递运用了C++的引用

初始定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;

//类型定义

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*linkList;
单链表创建并初始化 头插法
void CreateList_L1(linkList &L,int n){//带头结点的单链表(头插法) L为头结点 n为元素个数
    linkList p;
    L = (linkList)malloc(sizeof(LNode));	//为分配头结点空间
    L->next = NULL;
    for(int i=0;idata);
        //核心代码
        p->next = L->next;	
        L->next = p;
    }
}
尾插法
void CreateList_L2(linkList &L,int n){//带头结点的单链表(尾插法) L为头结点 n为元素个数
    linkList p,tail;
    L = (linkList)malloc(sizeof(LNode));
    L->next = NULL;//初始化为空链表
    tail = L;//tail为尾指针
    for(int i = 0;idata);
        //核心代码
        tail->next = p;
        tail = p;
    }
    tail->next = NULL;	//最后结点的next置空
}
获取单链表的长度
int GetLength_L(linkList L){//获取单链表的长度 传参为头结点
    linkList p = L->next;
    int len = 0;
    while(p){	//当p!=NULL时
        len++;
        p = p->next;	//指向下一结点
    }
    return len;	//返回单链表长度
}
单链表遍历输出
void OutputList_L(linkList L){//单链表输出
    linkList p;
    p = L->next;
    while(p!=NULL){	//p!=NULL时
        printf("%d  ",p->data);	
        p = p->next;	//指向下一结点
    }
}
判断是否为空
Status ListEmpty_L(linkList L){//判断单链表是否为空
    if(L->next==NULL)
        return TRUE;
    else
        return FALSE;
}
获取元素操作

获取第i个元素值 并用e接收

Status GetElem_L(linkList L,int i,int &e){//获取第i个元素 其值赋给e 返回OK
    linkList p;
    p = L->next;
    int j = 1;//j为计数器
    //if(p)等价于p!=NULL if(!p)等价于p==NULL
    while(p&&jnext;
        j++;
    }
    if(!p||j>i){	//不符合条件
        return ERROR;
    }
    e = p->data;	//取第i个元素
    return OK;
}
删除操作

删除第i个元素 用e返回其值

Status ListDelete_L(linkList &L,int i,int &e){//在带头结点的单链线性表L中 删除第i个元素 并由e返回其值
    linkList p;
    p = L->next;
    int j = 1;
    while(p->next&&jnext;
        j++;
    }
    if(!(p->next)||j>i-1){	//不存在元素或p->next = NULL
        return ERROR;
    }
    linkList q;	
    q = p->next;	//应删除位置
    p->next = q->next;	//调整删除元素前后位置的指针
    e = q->data;	//用e返回删除元素
    free(q);
    return OK;
}
插入操作

在单链表的第i个位置之前插入元素e

Status ListInsert_L(linkList &L,int i,int e){
    linkList p;
    p = L->next;
    int j = 1;
    //这里也可以写为:p = L; int j = 0;
    while(p&&jnext;
        j++;
    }
    if(!p||j>i-1){
        return ERROR;
    }
    linkList s;
    s = (linkList)malloc(sizeof(LNode));	//为增加元素分配空间
    s->data = e;
    //插入核心代码
    s->next = p->next;
    p->next = s;
    return OK;
}
整表删除
Status ClearList_L(linkList &L){//单链表的整表删除
    linkList p,q;
    p = L->next;	//指向头结点的下一节点
    while(p){	//p不为NULL时
        q = p->next;
        free(p);	//释放结点
        p = q;
    }
    L->next = NULL;	//将头结点的next指针置NULL
    return OK;
}

——————END——————

作者注:

记录学习,分享经验。
有兴趣可以关注博主,以后还会持续更新内容哦~
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号