数据结构学习笔记(二) 链表之单链表的基本操作
来源:互联网 发布:常用的数据分析模型 编辑:程序博客网 时间:2024/06/07 06:11
以下是一些单链表的基本操作方法,包括单链表的创建、增加或删除元素,查找某一个元素以及反转单链表。
#include<iostream>using namespace std;//抽象数据类型typedef int datatype;typedef struct node{ datatype data; struct node *next;}ListNode,*LinkList;//单链表的创建void Create(LinkList &head,int i){ datatype x; ListNode *p,*q; q=head=NULL; cout<<"请输入5个数:"<<endl; while(i--) { p=new ListNode; cin>>x; p->data=x; p->next=NULL; if(head==NULL) head=p; if(q!=NULL) q->next=p; q=p; }}//查找链表第i个结点地址ListNode* Locate(LinkList head,int i){ //参数检查 if(i<0) return NULL; ListNode* p; p=head; while(i--) p=p->next; return p;}//单链表的插入void Insert(LinkList &head,int i,datatype x){ //参数检查 if(i<0) { cout<<"插入位置不合法!"<<endl; return; } if(i>5) { cout<<"插入位置超过链表尾端,默认插入在表尾!"<<endl; i=5; } ListNode *p,*q; q=head; if(i==0) { p=new ListNode; p->data=x; p->next=head; head=p; } else { i--; while(i--) q=q->next; p=new ListNode; p->data=x; p->next=q->next; q->next=p; }}//单链表的删除void Delete(LinkList &head,int i){ //参数检查 if(i<0||i>5) { cout<<"删除的位置不合法!"<<endl; return; } ListNode *p,*q; p=q=head; if(i==0) head=q->next; else { i--; while(i--) p=p->next; q=p->next; p->next=q->next; } delete q;}//单链表的反转void Reverse(LinkList &head,int i){ ListNode *p,*r; r=NULL; while(head!=NULL) { p=head; head=p->next; p->next=r; r=p; } head=p;}//打印单链表void Print(LinkList &head,int i){ //参数检查 if(head==NULL) { cout<<"链表为空!"<<endl; return; } ListNode *p; p=head; cout<<"链表中的元素为:"<<endl; while(i--) { cout<<p->data<<" "; p=p->next; } cout<<endl;}//测试函数int main(){ LinkList head; ListNode *n; int i; datatype x; Create(head,5); Print(head,5); cout<<"输入要查找的结点编号:"<<endl; cin>>i; n=Locate(head,i- cout<<n->data<<endl; cout<<"输入要插入的结点编号以及对应的值:"<<endl; cin>>i>>x; Insert(head,i-1,x); Print(head,6); cout<<"输入`````的结点编号:"<<endl; cin>>i; Delete(head,i-1); Print(head,5); cout<<"单链表反转:"<<endl; Reverse(head,5); Print(head,5); return 0;}
阅读全文
0 0
- 数据结构学习笔记(二) 链表之单链表的基本操作
- 数据结构学习笔记(顺序表的基本操作)
- 【学习总结】数据结构之循环链表的基本操作
- 数据结构之链表的基本操作
- MySQL学习笔记之二:数据库和表基本操作
- 数据结构学习之单向链表的基本操作(非递归实现)
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- 数据结构笔记(二)线性表的链式表示和基本操作
- 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
- 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
- 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
- OpenCV学习笔记之(二):图像的基本操作(VS2010+OpenCV3.0)
- 数据结构笔记之数据结构基本概述(二)
- Webdriver学习笔记(二)浏览器的基本操作
- OpenCV 学习笔记 ----图像的基本操作(二)
- OpenCV_Python 学习笔记(二)图像的基本操作
- python数据结构之列表基本操作[学习笔记]
- ibatis学习笔记(二) 基本操作
- 关于apk中raw路径获取
- 几何 Crazy Rabbit
- [HAOI2015]数字串拆分(矩阵乘法)
- javascript之贪吃蛇案例
- 词嵌入2017年进展全面梳理:趋势和未来方向
- 数据结构学习笔记(二) 链表之单链表的基本操作
- XML解析SAX与DOM
- JAVA发送邮件
- [Leetcode][python]Largest Rectangle in Histogram
- 「安卓干货铺」节后送书福利-感谢大家一直以来对我的支持!
- fastdfs-nginx-module_v1.16.tar.gz 下载
- 整数的大数加减
- 算法分析与设计week07--435. Non-overlapping Intervals
- 递归实现pow内建函数和欧几里德算法