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

 #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. S02_CH04_User_IP实验Enter a post title

    S02_CH04_User_IP实验 4.1 创建IP 在之前的教程中,我们通过MIO与EMIO来控制LED,所使用的也是官方的IP,实际当中,官方提供的IP不可能涵盖到方方面面,用户需要自己编写硬件 ...

  2. WPF DataGrid控件中某一列根据另一个文本列的值显示相应的模板控件

    之前做项目的时候需要实现这样一个功能.WPF DataGrid有两列,一列为"更新状态”列,一列为"值"列,如果"更新状态"列的值为“固定值更新”,则 ...

  3. JS 编程艺术

    JS艺术片段剪贴 getFullDate: function (date) { //返回 YYYY年MM月DD日 var year = month = day = ' '; if (isNaN(dat ...

  4. docker 第五篇 存储

    镜像概述复习 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层 如果运行中的容器修改了现有的一个已经存在的文件,那改文件将会从读写层下面的只读 ...

  5. 【小知识点】input输入框在安卓以及IOS手机中光标及字体不居中解决方法

    问题根本:不要使用line-height垂直居中. 解决方法:可直接定义height,然后高度由上下padding值撑开. input { height: 1rem; padding: 1rem 0; ...

  6. ADF为EO的ITEM添加默认值

    Literal:设置为缺省的静态值.Expression:使用 Groovy 表达式设置缺省值.下面是一个表达式,用于将数据库序列(EMPLOYEES_SEQ)作为主键的缺省值:(new oracle ...

  7. python之atexit模块的使用

    python atexit 模块定义了一个 register 函数,用于在 python 解释器中注册一个退出函数,这个函数在解释器正常终止时自动执行,一般用来做一些资源清理的操作. atexit 按 ...

  8. opencv读取图像python和c++版本的结果不同

    问题: 在读取同一张图像时,python读取的结果和c++读取的结果差异较大,测试图像中最大误差达到16. 原因: python的opencv采用的是4.1.1,c++采用的是3.1.0,在解析JPE ...

  9. Oracle笔记(十) 约束

    表虽然建立完成了,但是表中的数据是否合法并不能有所检查,而如果要想针对于表中的数据做一些过滤的话,则可以通过约束完成,约束的主要功能是保证表中的数据合法性,按照约束的分类,一共有五种约束:非空约束.唯 ...

  10. Django学习:创建admin后台管理站点

    Django自带一个后台管理站点,方便我们管理数据.这个界面只给管理员使用,并不对大众开放. 创建管理员用户 py manage.py createsuperuser 如下图所示: 用户名不填的话,默 ...