新学数据结构,上我写的代码。

 #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++学习之单链表以及常用的操作的更多相关文章

  1. C++ 数据结构学习二(单链表)

    模板类 //LinkList.h 单链表#ifndef LINK_LIST_HXX#define LINK_LIST_HXX#include <iostream>using namespa ...

  2. c++学习笔记—单链表基本操作的实现

    用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表).结点的查找.删除.排序.打印输出.逆置.链表销毁等基本操作. IDE:vs2013 具体实现代码如下: #include  ...

  3. C++学习---单链表的构建及操作

    #include <iostream> using namespace std; typedef struct LinkNode { int elem;//节点中的数据 struct Li ...

  4. C++单链表的创建与操作

    链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素.链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结 ...

  5. 单链表的插入删除操作(c++实现)

    下列代码实现的是单链表的按序插入.链表元素的删除.链表的输出 // mylink.h 代码 #ifndef MYLINK_H #define MYLINK_H #include<iostream ...

  6. 单链表上的一系列操作(基于c语言)

    单链表的实现分为两种单链表(其实差别并不是很大):带头结点和不带头结点,分别对应下面图中的上下两种. 链表的每一个结点是由两个域组成:数据域和指针域,分别存放所含数据和下一个结点的地址(这都是很明白的 ...

  7. C语言学习016:单链表

    #include <stdio.h> //定义一个链表,链表是一种递归结构,在定义的时候必须要给结构起一个名字 typedef struct folder{ int level; char ...

  8. Python基础学习笔记(六)常用列表操作函数和方法

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-lists.html 3. http://www.liaoxuef ...

  9. 单链表无head各种操作及操作实验

    #encoding=utf-8 class ListNode: def __init__(self,x): self.val=x; self.next=None;   #链表逆序 def revers ...

随机推荐

  1. linux下nginx搭建

    1.准备 1-1.安装 make,zlib,gcc-c++,openssl yum -y install make zlib zlib-devel gcc-c++ libtool  openssl o ...

  2. mysqlbinlog实战

    关于mysqlbinlog命令,下列参数应用频率较高:--base64-output:选项有三个参数,never表示不处理ROW格式日志,只处理传统的基于STATEMENT格式日志.decode-ro ...

  3. 【广搜】Knight Moves

    题目描述 Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights fr ...

  4. 工作单元 — Unit Of Work

    在进行数据库添加.修改.删除时,为了保证事务的一致性,即操作要么全部成功,要么全部失败.例如银行A.B两个账户的转账业务.一方失败都会导致事务的不完整性,从而事务回滚.而工作单元模式可以跟踪事务,在操 ...

  5. .Net Core项目如何设置静态页面为项目的启动页面?

    最近在使用Core的webApi作为服务器端的数据提供者,但是需要有自己的官网,来指导前端如何使用该接口,因为不想接入MVC这么大的框架,于是写了个静态页面挂上doc文档提供下载就行. 在项目的Sta ...

  6. SpringBoot 异步调用方法并接收返回值

    项目中肯定会遇到异步调用其他方法的场景,比如有个计算过程,需要计算很多个指标的值,但是每个指标计算的效率快慢不同,如果采用同步执行的方式,运行这一个过程的时间是计算所有指标的时间之和.比如: 方法A: ...

  7. 编写Dockerfile自定义镜像

    要求 编写一个Dockerfile自定义centos镜像,要求在容器内部可以使用vim和ifconfig命令,并且登入落脚点为/usr/local 编写Dockerfile FROM centos M ...

  8. ES6-数组的扩展-整理

    一.Array.from():负责把类似数组的对象以及可遍历的对象转为真正的数组 1.类似数组的对象 let arrayLike = { '0': 'a', '1': 'b', '2': 'c', l ...

  9. SpringCloud之Ribbon负载均衡配置

    一.负载均衡解决方案分类及特征 业界主流的负载均衡解决方案有: 1.1 集中式负载均衡 即在客户端和服务端之间使用独立的负载均衡设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责 ...

  10. django框架—终端命令

    创建一个虚拟环境:在虚拟环境中创建项目目录 cd到项目根目录 创建项目:django-admin startproject "项目名称" 创建app:python manage.p ...