c++学习之单链表以及常用的操作
新学数据结构,上我写的代码。
#include <iostream>
#include <cstdlib> using namespace std; typedef int ElemType; struct Node
{
ElemType data;
Node* next;
}; typedef Node* LinkList; //数据域的输入
void input(ElemType* a)
{
cout<<"please enter the date value of the current node: ";
cin >> *a;
} //尾插法,我觉得更加符合我的习惯。这里用*L是因为需要将创建的头指针返回到主函数中,所以用指针
void CreateLinkList(LinkList* L,int n,void input(ElemType*))
{
cout<<"this is the tail-insert-proach..."<<endl;
LinkList s;
*L = new Node;
LinkList p = *L;
(*L)->next = NULL;
for(;n>;n--)
{
s = new Node;
input(&s->data);
s->next = NULL;
p->next = s;
p = s;
}
s->next = NULL;
} //链表的销毁
void DestoryList(LinkList *L)
{
cout<<"we are going to delete the linklist..."<<endl;
LinkList q,p = *L;
while(p != NULL)
{
q = p->next;
delete p;
p = q;
} *L = NULL;
cout<<"we have destoryed the linklist..."<<endl;
} void visit(ElemType* data)
{
cout<<"the data of current node is: "<<*data<<endl;
} //链表的遍历,这里不需要将变化返回到主函数中,所以不需要用指针。
void ListTraverse(LinkList L,void visit(ElemType*))
{
LinkList p = L;
p = p->next;
while(p != NULL)
{
visit(&p->data);
p = p->next;
}
} //比较函数
bool compare(ElemType* a,ElemType* b)
{
if(*a == *b)
return true;
else
return false;
} //在链表中查找元素e
void LocateElem(LinkList L,ElemType e,bool compare(ElemType*,ElemType*))
{
int i = ; //记录结点的位置
LinkList p = L;
p = p->next;
i++;
while(p!=NULL)
{
if(compare(&p->data,&e))
{
cout<<"we have found the element in "<<i<<" node"<<endl;
}
p = p->next;
i++;
}
} //在链表中插入一个数字
int ListInsert(LinkList *L,int i,ElemType e)
{
LinkList p = *L;
while(p!=NULL && i>) //找到第i-1个结点
{
p = p->next;
i--;
}
if(p==NULL || i<) return ; //判断结点存在
LinkList s = new Node; //将结点插入
s->data = e;
s->next = p->next;
p->next = s;
return ;
} int ListDelete(LinkList *L,int i,ElemType *ep)
{
LinkList p = *L;
while(p!=NULL && i>) //找到第i-1个结点
{
p = p->next;
i--;
}
if(p==NULL || i<) return ;
LinkList q = p->next;
p->next = q->next;
*ep = q->data;
delete q;
return ;
} int main()
{
LinkList L; //头指针,指向创建的头结点。头结点的data为空,尾结点的next为NULL
int n,ep;
cout<<"please enter the number of needed nodes(except the head node)..."<<endl;
cin>>n;
CreateLinkList(&L,n,input);
LocateElem(L,,compare);
ListInsert(&L,,);
ListDelete(&L,,&ep);
cout<<"the delete data value is "<<ep<<endl;
ListTraverse(L,visit);
DestoryList(&L);
return ;
}
下面是程序运行的结果:

c++学习之单链表以及常用的操作的更多相关文章
- C++ 数据结构学习二(单链表)
模板类 //LinkList.h 单链表#ifndef LINK_LIST_HXX#define LINK_LIST_HXX#include <iostream>using namespa ...
- c++学习笔记—单链表基本操作的实现
用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表).结点的查找.删除.排序.打印输出.逆置.链表销毁等基本操作. IDE:vs2013 具体实现代码如下: #include ...
- C++学习---单链表的构建及操作
#include <iostream> using namespace std; typedef struct LinkNode { int elem;//节点中的数据 struct Li ...
- C++单链表的创建与操作
链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素.链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结 ...
- 单链表的插入删除操作(c++实现)
下列代码实现的是单链表的按序插入.链表元素的删除.链表的输出 // mylink.h 代码 #ifndef MYLINK_H #define MYLINK_H #include<iostream ...
- 单链表上的一系列操作(基于c语言)
单链表的实现分为两种单链表(其实差别并不是很大):带头结点和不带头结点,分别对应下面图中的上下两种. 链表的每一个结点是由两个域组成:数据域和指针域,分别存放所含数据和下一个结点的地址(这都是很明白的 ...
- C语言学习016:单链表
#include <stdio.h> //定义一个链表,链表是一种递归结构,在定义的时候必须要给结构起一个名字 typedef struct folder{ int level; char ...
- Python基础学习笔记(六)常用列表操作函数和方法
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-lists.html 3. http://www.liaoxuef ...
- 单链表无head各种操作及操作实验
#encoding=utf-8 class ListNode: def __init__(self,x): self.val=x; self.next=None; #链表逆序 def revers ...
随机推荐
- 教你如何进行移动端APP测试
1.安全测试(权限) 1)软件权限:其中包括发送信息,拨打电话,链接网络,访问手机信息,联系人信息等等 2)数据在本地的存储.传输等 3)执行某些操作时导致的输入有效性验证.授权.数据加密等方面 4) ...
- 以前面试 经常写这种 问掉的 copy 还是 =
get的时候,生成的 那个对象赋值给aa 生成的对象在这条语句完 就析构了: https://blog.csdn.net/qq_31759205/article/details/80544468h ...
- mvc 登陆界面+后台代码
上代码 前端+js(懒得分文件了) @{ ViewBag.Title = "MVC权限系统架构学习-登录"; Layout = "/Views/Shared/_LoadJ ...
- Docker 启动SQLServer
1.运行这个命令 docker run -d -e SA_PASSWORD=Docker123 -e SQLSERVER_DATABASE=qgb -e SQLSERVER_USER=sa -e ...
- webapi 之 post参数传递
最近在写webapi,在写post请求接口时遇到了不少的问题,在此记录下来. post请求的参数和get请求有点不一样,我们知道get请求的参数是通过url来传递的,而post请求则是通过http的请 ...
- 红黑树和AVL树
在此之前,我没有了解过红黑树以及AVL tree,真是孤陋寡闻.如果你也在学习的话,我们一起进步. 如果,你很急,那么只看红色加粗即可. 1.红黑树(RB-tree) 红黑树是一种特殊的二叉搜索树,特 ...
- Oracle权限管理详解(2)
详见:https://blog.csdn.net/u013412772/article/details/52733050 Oracle数据库推荐以引用博客: http: http:.html http ...
- Hadoop_28_MapReduce_自定义 inputFormat
1. 自定义inputFormat 1.1.需求: 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件,此时就需要有相应解决方案; 1.2.分析: 小文件的优化 ...
- wget最好不要用
下载速度 很慢 如果大文件 还是windows 迅雷吧
- Redis入门(一)——安装
1.下载地址,选择对应版本 https://github.com/dmajkic/redis/downloads 2.下载解压后,进入到文件夹,地址栏cmd,redis-server.exe redi ...