您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
本篇内容主要讲解“C语言怎么实现单链表的基本功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现单链表的基本功能”吧!
1.首先简单了解一下链表的概念:
要注意的是链表是一个结构体实现的一种线性表,它只能从前往后,不可以从后往前(因为next只保存下一个节点的地址).在实现单链表的操作时,需要用指针来操作.很简单,注释写的很详细,欢迎大家指正哈哈哈哈~之前写的太烂了重新写了一下.....
2.代码展示:
#include <stdio.h> #include <assert.h> #include <stdlib.h> 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位置之后插入x void 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位置之后插入x void 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语言怎么实现单链表的基本功能”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。