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 ...
随机推荐
- 第十一章 ZYNQ-MIZ701 PS读写PL端BRAM
本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...
- uni-app中picker组件的一个坑
这里直接贴出代码 <view class="goods-info-add fl-sw"> <view>运费模板:</view> <view ...
- 【ES6 】ES6 解构赋值--函数参数解构赋值
函数的参数也可以使用解构赋值. function add([x, y]){ return x + y; } add([1, 2]); 上面代码中,函数add的参数表面上是一个数组,但在传入参数的那一刻 ...
- nuxt项目打包上线之二
之前写过一篇nuxt打包上线的文章,请看这里:https://www.cnblogs.com/daisygogogo/p/11218809.html 上一篇文章的部署流程有点不好的地方,就是它适用于只 ...
- css改变鼠标指针的形状
<html> <body> <span style="cursor:auto"> <br /> <span style=&qu ...
- git冲突Pull is not possible because you have unmerged files
本地的push和merge会形成MERGE-HEAD(FETCH-HEAD), HEAD(PUSH-HEAD)这样的引用.HEAD代表本地最近成功push后形成的引用.MERGE-HEAD表示成功pu ...
- CompletionService异步非阻塞获取并行任务执行结果
第1部分 问题引入 <Java并发编程实践>一书6.3.5节CompletionService:Executor和BlockingQueue,有这样一段话: "如果向Execut ...
- Man手册--nmap
目录 nmap使用手册 附录: nmap使用手册 附录: NMAP(1) Nmap Reference Guide NMAP(1) NAME nmap - Network exploration to ...
- Linux/Unix/Cygwin 常用命令
以下只说明各指令的基本用法,若需详细说明,请用man去读详细的manual.[Cygwin通常没有安装 man相关的文件,所以没有man功能] 1.关于文件/目录处理的指令: 1.1 ls 这是最基本 ...
- Linux的bg和fg命令
我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和 bg 命令,让我们轻松调度正在运行的 ...