线性表系列(二)-单向链表的全面解析
来源:互联网 发布:英语专四作文 人工智能 编辑:程序博客网 时间:2024/06/09 12:59
单向链表,相对于顺序表的优点:删除和查找速度快,只需改变指针指向,无需移动元素
主要实现功能:1,初始化链表
2,查找
3,插入
4,删除
5,逆序
链表的节点结构:
typedef struct LNode {int data;int length; //链表的长度struct LNode *next;}*LinkList;
链表的这几个功能实现都很简单,不做过多概述,就是指针控制能力问题,以下代码仅供参考学习,可运行
#include<iostream>#include<stdio.h>#include<string>using namespace std;typedef struct LNode {int data;int length; //链表的长度struct LNode *next;}*LinkList;//初始化链表void CreateList(LinkList &L,int n){LNode *p,*q;L=(LinkList )malloc(sizeof(LNode));L ->next = NULL;L->length=0;q=L;int length=0;for(int i=n;i>0;--i){p=(LNode *)malloc(sizeof(LNode));cin>>p->data;p->next=q->next;q->next=p;q=p;L->length++;}}//获取第i位置的元素的值int GetElem(LinkList L,int i){LNode *p;p=L;if(i<1||i>=L->length+1)return 0;while(i--)p=p->next;return p->data;}//在位置i插入元素eint InsertList(LinkList &L,int i,int e){LNode *p;p=L;if(i<1||i>L->length+1){cout<<"超过链表长度"<<endl;return 0;}i--;while(i--)p=p->next;LNode *s=(LNode *)malloc(sizeof(LNode));s->data=e;s->next=NULL;s->next=p->next;p->next=s;L->length++;cout<<L->length<<endl;return 1; //插入成功}//删除链表的第i个元素int DeleteList(LinkList &L,int i){LNode *p=L;if(i<1||i>L->length){cout<<"超过链表的长度"<<endl;return 0; //删除失败}i--;while(i--)p=p->next;LNode *q;q=p->next;p->next=q->next;L->length--;return 1;}//打印链表void PrintList(const LinkList L){LNode *p;p=L->next;for(int i=0;i<L->length;i++)if(p){cout<<p->data<<" ";p=p->next;}cout<<endl;}//实现链表逆序,在不断链的情况下void Inverse(LinkList &L){LNode *p,*q,*A;p=L->next;A=L;while(p){q=p->next;p->next=A;A=p;//保存当前节点p=q;}L->next->next=NULL;L->next=A;}//释放链表void FreeList(LinkList &L){LNode *p,*q;p=L;while(p->next!=NULL){q=p->next;free(p);p=q;}}int main(){LinkList L;int n;cout<<"输入初始链表的长度"<<endl;cin>>n;CreateList(L,n);Inverse(L);//逆序一下链表PrintList(L);cout<<"输入删除第几位"<<endl;cin>>n;DeleteList(L,n);PrintList(L);cout<<"输入插入到第几位和插入的数值"<<endl;int k;cin>>n>>k;InsertList(L,n,k);PrintList(L);cout<<"输入查找第几个元素"<<endl;cin>>n;cout<<GetElem(L,n)<<endl;FreeList(L);return 0;}
注:main()函数好多可以自己定义
- 线性表系列(二)-单向链表的全面解析
- 单向线性链表的实现
- 单向线性链表的实现
- 单向线性表的存储
- (一)线性表、单向链表
- 二.单向链式存储线性表
- 线性表的链接存储结构-单向链表
- 线性单向链表的逆序排列算法一例
- 单向线性表的一些基本操作
- 数据结构----线性表----单向链表
- 线性表—单向链表
- 线性表—单向链表
- 线性复杂度反转单向链表
- 大话数据结构四:线性表的链式存储结构(单向循环链表)
- 线性表的Java实现--链式存储(单向链表)
- 数据结构复习——线性表的链式存储实现(单向链表)
- 大话数据结构四:线性表的链式存储结构(单向循环链表)
- 单向链表操作详解(二)
- 联通ADSL拨号上网 80端口 被封?
- 或许就是VC6.0与VS2010的差别吧
- 常用数据挖掘算法
- 设备驱动-----Android关机流程总结2
- NYOJ 123 士兵杀敌4-树状数组的插线求点
- 线性表系列(二)-单向链表的全面解析
- sql_trace/10046事件数据库诊断
- Effective C++读书笔记(27)
- 插入排序(3种语言实现 c/java/python)
- PDFLib学习
- opencv2.2的安装
- 第四届蓝桥杯C/C++B组第五题
- 扒一扒这个数据挖掘行业
- 用PHP程序给图片添加水印