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 ...
随机推荐
- hdu 1113 简单字符处理问题
#include <map> #include <cstdio> #include <iostream> #include <string> #incl ...
- RestShrap Simple REST and HTTP Client for .NET 了解
最近做一个项目,需要上传文件到文件服务器, 文件服务器是 内部的webapi形式的接口.经朋友推荐使用restshrap , 例子: //上传文件 var request=new RestClient ...
- 【Caffe学习笔记】一 、环境安装 Caffe + cuda + windows10 + VS2015 安装笔记, win7也适用
1. 下载cuda8.0 cudnn5 anaconda https://developer.nvidia.com/cuda-80-ga2-download-archive https://de ...
- 通过hadoop上的hive完成WordCount
1.启动hadoop 打开所有命令:start-all.sh 2.Hdfs上创建文件夹 创建名为PGOne到user/hadoop 3.上传文件至hdfs 创建和修改508.txt文件,里面尽量多写一 ...
- 使用2种python脚本工具将2个txt文档中的文字进行比较,并计算出Corr, WER正确率,准确率
一.准备: linux服务器,src2mlf.py rec2mlf.py HResults文件,1份源文件和1份需要对比的文件.文件放置于本人云盘 二.使用方法: 1. 对比工具 HResul ...
- 测试clang-format的格式化效果
我自己写的业余框架已告一段落,主体功能已完成,剩下的就是优化.第一个要优化的,就是代码格式.我一直是用编辑器写代码的,从之前的UltraEdit到notepad++到sublime text,再到现在 ...
- SpEL表达式总结
前言SpEL(Spring Expression Language),即Spring表达式语言,是比JSP的EL更强大的一种表达式语言.为什么要总结SpEL,因为它可以在运行时查询和操作数据,尤其是数 ...
- 八:MVC初始化数据库
生成数据库策略: CreateDatabaseIfNotExists:方法会在没有数据库时创建一个,这是默认行为. DropCreateDatabaseIfModelChanges:如果我们在在模型改 ...
- kafka消费者
from kafka import KafkaConsumer,TopicPartition import json scrapy_kafka_hosts = ["ip:端口", ...
- Appium Desired Capabilities-General Capabilities
Desired Capabilities are keys and values encoded in a JSON object, sent by Appium clients to the ser ...