数据结构-线性表-单链表
来源:互联网 发布:app直播源码下载 编辑:程序博客网 时间:2024/06/05 08:00
单链表定义
单链表:具有指向下一个节点的结构体.
功能描述
- 创建新链表
- 获取长度
- 按索引查找
- 按值查找
- 删除某节点
- 更改某结点值
- 向后添加一个结点
- 显示所有结点内容
代码实现
#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int num; LNode * next;};//创建链表LNode * creatLNode(){ LNode * lNode=(LNode *)malloc(sizeof(LNode)); lNode->next=NULL; return lNode;}//获取长度int lengthLNode(LNode *L){ int i=0; LNode *lNode=L; while(lNode->next!=NULL){ lNode=lNode->next; i++; } return i+1;//之所以+1,因为指针指向最后一个元素,但i没用自增,故+1}int getLenth(LNode *L){ int length=0; LNode *p=L; while (p){ p=p->next; length++; } return length;}//向后添加一个结点bool addLnode(LNode * L,int num){ LNode * last=L; LNode * lnode=(LNode *)malloc(sizeof(LNode)); lnode->num=num; lnode->next=NULL; while (last->next!=NULL){ last=last->next; } last->next=lnode; return true;}//查找 通过索引值LNode * findNodeByIndex(LNode *L,int index){ LNode *p=L; int i=0; while (p!=NULL&&i<index){ p=p->next; i++; } if(i==index)return p; else return NULL;}//查找 通过值LNode *findLNodeByValue(LNode *L,int value){ LNode *p=L; while(p){ if(p->num==value){ return p; } p=p->next; } return NULL;}LNode * findLNodeByV2(LNode *L, int value){ LNode *p=L; while (p!=NULL&&p->num!=value){ p=p->next; } return p;}//插入 索引值为插入结点//存在插入头结点的情况,故以返回值形式的函数LNode* insert(LNode *L,int index,int num){ LNode* p; LNode *newL=(LNode *)malloc(sizeof(LNode)); newL->num=num; if (index==0){ newL->next=L; return newL; } //获取前结点 p=findNodeByIndex(L,index-1); //判断是否为空 if (p=NULL){ return NULL; } //进行插入操作 newL->next=p->next; p->next=newL; return L;}//修改某节点值bool changeValueByIndex(LNode *L,int index, int value){ if (index<0||index>getLenth(L)){ return false; } LNode * p=findNodeByIndex(L,index); p->num=value; return true;}//删除某结点 存在删除头结点,故用函数返回值方式返回链表LNode * delNodeByIndex(LNode *L,int index){ if (index==0){ LNode *p=L; p=p->next; free(L); return p; } LNode * p1=findNodeByIndex(L,index-1); if (p1==NULL||p1->next==NULL){ return NULL; } LNode *p2=p1->next; p1->next=p2->next; free(p2); return L;}//显示所有节点内容void showAllLNode(LNode *L){ LNode * lNode=L; while(lNode){ printf("%d\t",lNode->num); lNode=lNode->next; } printf("\n");}int main(){ LNode *lNode=creatLNode(); for (int i = 0; i <10 ; i++) { addLnode(lNode,i); } LNode *head=findNodeByIndex(lNode,0); changeValueByIndex(lNode,0,-1); lNode=delNodeByIndex(lNode,5); showAllLNode(lNode); return 0;}
阅读全文
0 0
- 数据结构-线性表--单链表
- 数据结构(线性表):单链表
- 数据结构-线性表-单链表
- 数据结构(线性表)-单链表
- 数据结构:线性表之单链表
- 数据结构线性表之单链表
- 数据结构 线性表—单链表
- 数据结构-线性表_单链表
- 数据结构-线性表_单链表
- 数据结构:线性表之单链表
- 数据结构-线性表之单链表
- 数据结构C/C++线性表和单链表
- 数据结构学习笔记 --- 线性表 (单链表)
- 数据结构 线性表 建立单链表(头插法)
- 数据结构 线性表 建立单链表 尾插法
- 数据结构 线性表 单链表 插入与删除
- 数据结构 线性表 单链表的归并
- Java数据结构-线性表之单链表LinkedList
- 【报告】日本交易所报告:云技术比分布式账本技术更能满足资本市场的需求
- WebBroker StandAlone 程序访问速度很慢的奇怪现象
- 【学习摘记】马士兵bbs改良版_课时32_删除帖子_1——删除的递归以及相关处理,依旧是难点
- sharedpreferences存储本地数据
- 【国际】加拿大声明代币可能属于证券并公布辨别方法
- 数据结构-线性表-单链表
- poj 1000 a+b problem
- JS实现上传图片实时预览
- Linux下find命令使用
- 【CS 1004】四子连棋(bfs+hash,良心带样例解释)
- node启动_安装_依赖_构建
- javaWeb开发过程中遇到的乱码问题
- 方法重写的一大两小两同
- 高偏差、高方差、低精确率与低召回率、混淆矩阵