千家信息网

C语言怎么实现单链表的基本功能

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,本篇内容主要讲解"C语言怎么实现单链表的基本功能",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言怎么实现单链表的基本功能"吧!1.首先简单了解一下链表
千家信息网最后更新 2025年01月17日C语言怎么实现单链表的基本功能

本篇内容主要讲解"C语言怎么实现单链表的基本功能",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言怎么实现单链表的基本功能"吧!

1.首先简单了解一下链表的概念:

要注意的是链表是一个结构体实现的一种线性表,它只能从前往后,不可以从后往前(因为next只保存下一个节点的地址).在实现单链表的操作时,需要用指针来操作.很简单,注释写的很详细,欢迎大家指正哈哈哈哈~之前写的太烂了重新写了一下.....

2.代码展示:

#include #include #include typedef struct linklist {        int data;        struct linklist* next;}node;//目录//1.动态申请节点node* Creatnode(int x);//2.单链表的尾插void PushBack(node** plist, int x);//3.单链表的打印void Printlist(node** plist);//4.单链表尾删void Popback(node** plist);//5.单链表的头插void PushFront(node** plist, int x);//6.单链表的头删void PopFrount(node** plist);//7.单链表的查找node* Findpos(node* plist, int x);//8.单链表在pos位置之后插入xvoid Insertlinstafter(node* pos, int x);//9.单链表删除pos位置之后的元素void PopPosAfter(node* pos);//10.单链表的销毁void Destorylist(node** plist);//1.动态申请节点node*  Creatnode(int x) {        node* t = (node*)malloc(sizeof(node));        if (t == NULL) {                assert(0);                return NULL;        }        else {                t->next = NULL;                t->data = x;                return t;        }}//2.单链表的尾插void PushBack(node** plist, int x) {        assert(plist);        if (*plist == NULL) {                *plist = Creatnode(x);        }        else {                node* p = *plist;                while (p->next) {                        p = p->next;                }                p->next = Creatnode(x);        }}//3.单链表的打印void Printlist(node** plist) {        assert(plist);        node* p =* plist;        while (p) {                printf("%d ", p->data);                p = p->next;        }}//4.单链表尾删void Popback(node** plist) {        assert(plist);        if (*plist == NULL) {                return NULL;        }        node* p = *plist;        node* q = NULL;        while (p->next) {                q = p;                p = p->next;        }        q->next =NULL;        free(p);}//5.单链表的头插void PushFront(node** plist, int x) {        assert(plist);        node* t = Creatnode(x);        if (NULL == *plist) {                *plist = t;        }        else {                t->next = *plist;                *plist = t;        }}//6.单链表的头删void PopFrount(node** plist) {        assert(plist);        if (plist == NULL) {                return NULL;        }        else {                node* p = *plist;                *plist = p->next;                free(p);        }}//7.单链表的查找node* Findpos(node* plist, int x) {        node* cur = plist;        while (cur) {                if (cur->data == x) {                        return cur;                }                cur = cur->next;        }        return NULL;}//8.单链表在pos位置之后插入xvoid Insertlinstafter(node* pos, int x) {        assert(pos);        if (NULL == pos) {                return ;        }        node* t = Creatnode(x);        t->next = pos->next;        pos->next = t;}//9.单链表删除pos位置之后的元素void PopPosAfter(node* pos) {        assert(pos);        if (pos->next == NULL) {                return;        }        else{                node* p = pos->next;                pos->next = p->next;                free(p);        }}//10.单链表的销毁void Destorylist(node** plist) {        assert(plist);        node* p = *plist;        while (p) {                *plist = p->next;                free(p);                p = *plist;        }        *plist = NULL;} void test1() {        node* plist=NULL;//创建头指针        PushBack(&plist, 1);//尾插元素        PushBack(&plist, 2);        PushBack(&plist, 3);        PushBack(&plist, 4);        PushBack(&plist, 5);        Printlist(&plist);//打印链表元素  1 2 3 4 5         printf("\n");        Popback(&plist); //尾删元素              PushFront(&plist, 0);//首插元素0            Printlist(&plist);//打印链表   0 1 2 3 4        printf("\n");        PopFrount(&plist);//首删元素0          Printlist(&plist);//打印链表   1 2 3 4        printf("\n");        Findpos(plist,1);//寻找链表中1的地址,不方便演示,下面会演示        Insertlinstafter(Findpos(plist, 4), 5);//在4后面插入5,用到上面的Findpos函数        Printlist(&plist);//打印链表   1 2 3 4 5        printf("\n");        PopPosAfter(Findpos(plist, 4));//删除指定位置后面的元素(删除4后面的5)        Printlist(&plist);//打印链表    1 2 3 4        printf("\n");        Destorylist(&plist);//销毁链表        Printlist(&plist);//打印链表}void test() {        test1();}int main() {        test();        return 0;}

3.测试结果:

a.先创建了头指针plist

b.尾插1 2 3 4 5

c. 尾删元素5

d.首插元素0

e.首删元素0

f.在元素4 后面插入5

g.删除4元素后面的5

h.销毁链表

到此,相信大家对"C语言怎么实现单链表的基本功能"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

元素 位置 功能 语言 指针 节点 内容 动态 地址 学习 演示 实用 更深 代码 兴趣 函数 实用性 实际 操作简单 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 吐鲁番网络技术怎么样 常用网络安全技术轮询 携程旅游官网数据库 数据库按时间条件删除数据 日志服务器 管理 逍遥西游转移数据库 数据库复制到另一个数据库命令 安卓软件开发计算器的报告 1u服务器一般多高 软件开发百度华为哪个好 各代移动通信网络技术 怎样公网访问内网服务器 韶关市网络安全学院 青岛戴尔服务器代理销售电话 丰台区管理软件开发包括什么 温州服装进销存软件开发 怎么搭建物理服务器 企业管控软件开发公司设计方案 软件开发 sde 有哪些 网络安全工作表态发言简短 数据库开发可以转到人工智能吗 私人服务器安全狗 上海播呗网络技术有限公司 服务器画图工具指令 tick 服务器 工业互联网网络技术有限公司 郑州交友软件开发公司 网站关停后数据库能导出吗 数据库工程师应该具备的素质 温州银上网络技术有限公司
0