第一、单链表的定义和操作

#include <iostream>
using namespace std; template <typename T>
struct Node {
T data;
Node* next;
}; template <typename T> class SingleLinkList {
public:
SingleLinkList() {
head = new Node<T>();
head->next = NULL;
} ~SingleLinkList() {
Node<T> *p;
while (head) {
p = head;
head = head->next;
delete p;
}
head = NULL;
} void createLinkList(int n) { std::cout << "you create single linklist with "<<n<<" node" << std::endl;
Node<T>* s, *p;
p = head; for (int i = ; i < n; i++)
{
s = new Node<T>();
cout << "please enter the " << i << " number" << endl;
std::cin >> s->data;
s->next = NULL; p->next = s;
p = s;
}
} bool insertNode(T data) {
Node<T>* p = head;
while (p->next!=NULL)
{
p = p->next;
} Node<T> *n = new Node<T>();
n->data = data;
n->next = NULL; p->next = n;
return true;
} bool insertNode(int i, T data) {
Node<T>* p = head;
int j;
for (j = ; j <= i-; j++)
{
p = p->next;
if (p==NULL)
{
break;
}
}
if (p==NULL&&j<(i-))
{
std::cout << "The index:"<<i<<" is not found" << std::endl;
return false;
} Node<T>* node = new Node<T>();
node->data = data; node->next = p->next;
p->next = node;
return true;
} bool deleteNode(int i) {
Node<T>*f = head;
Node<T>*s = head;
int j;
for (j=; j <= i; j++)
{
s = f;
f = f->next;
if (f==NULL)
{
break;
}
}
if (j<i+)
{
std::cout << "The index:" << i << " is not found" << std::endl;
return false;
} s->next = f->next;
delete f;
return true;
} T getElement(int i) {
Node<T> *p = head;
int j;
for (j = ; j <= i; j++)
{
p = p->next;
if (p==NULL)
{
break;
}
}
if (j<i && p==NULL)
{
std::cout << "The index:" << i << " is not found" << std::endl;
} return p->data;
} int findNode(T value) {
Node<T> *p = head;
int i = ;
while (p!=NULL)
{
if (p->data==value)
{
break;
}
p = p->next;
i++;
}
if (p==NULL)
{
return -;
}
return i;
} void printAll() {
Node<T>*p = head->next;
while (p!=NULL)
{
std::cout << p->data << " ";
p = p->next;
}
cout << endl;
} int lenght() {
Node<T>*p = head->next;
int j = ;
while (p!=NULL)
{
p = p->next;
j++;
}
return j;
} bool clearLink() {
Node<T>* current = head->next;
while (head->next!=NULL)
{
current = head->next;
head->next = current->next;
delete current;
}
return true;
} bool isEmpty() {
return head->next == NULL;
}
private:
Node<T>* head;
};

第二、控制台演示

#include "pch.h"
#include <iostream>
#include "SingleLinkList.h"
using namespace std; int main()
{
SingleLinkList<int> sLinkList;
cout << "1:createLinkList(int n);" << endl;
cout << "2:insertNode(T data);" << endl;
cout << "3:insertNode(int i, T data);" << endl;
cout << "4:int findNode(T value)" << endl;
cout << "5:int printAll()" << endl;
cout << "6:deleteNode(int i)" << endl;
cout << "7: T getElement(int i)" << endl;
cout << "8: clearLink()" << endl; cout << "10:exit;" << endl;
int cmd=;
do {
cout << "please tap cmd" << endl;
cin >> cmd;
switch (cmd)
{
case :
{
cout << "please enter the number of nodes you want to create" << endl;
int nNum = ;
cin >> nNum;
sLinkList.createLinkList(nNum);
}
break;
case :
cout << "please enter data " << endl;
int data;
cin >> data;
sLinkList.insertNode(data);
break;
case :
cout << "please enter index and data,example 4 10" << endl;
int d, i;
cin >> i >> d;
sLinkList.insertNode(i, d);
break;
case :
{ cout << "please enter data you want to search" << endl;
int searchData;
cin >> searchData;
int index = sLinkList.findNode(searchData);
cout << "search index:" << index << endl; }
break;
case :
sLinkList.printAll();
break;
case :
cout << "please enter index you want to delete" << endl;
int delIndex;
cin >> delIndex;
sLinkList.deleteNode(delIndex);
break;
case :
cout << "please enter index" << endl;
int getIndex;
cin >> getIndex;
{ int dataElement = sLinkList.getElement(getIndex);
cout << "value:" << dataElement << endl; }
break;
case :
sLinkList.clearLink();
break;
default:
break;
}
} while (cmd != ); return ;
}

C++ 单链表操作总结的更多相关文章

  1. 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏

    数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...

  2. 数据结构之 线性表---单链表操作A (删除链表中的指定元素)

    数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...

  3. c语言实现--带头结点单链表操作

    可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址 ...

  4. C单链表操作

    #include <stdio.h> #include <stdlib.h> #define ElemType int #define Status int #define O ...

  5. c语言实现--不带头结点的单链表操作

    1,不带头结点的单链表操作中,除了InitList(),GetElem(),ListInsert(),ListDelete()操作与带头结点的单链表有差别外,其它的操作基本上一样. 2,不带头结点单链 ...

  6. C语言,单链表操作(增删改查)(version 0.1)

    这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...

  7. 【数据结构与算法】单链表操作(C++)

    #include <stdio.h> #include <malloc.h> /*单链表节点定义*/ typedef struct LNode { int data; //da ...

  8. C++单链表操作

    #include <stdio.h> typedef struct _Node{   int value;   _Node *next;}Node; void AddNodeTail(No ...

  9. 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

    数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...

随机推荐

  1. free和delete把指针怎么啦?

    别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉. 用调试器跟踪示例7-5,发现指针p被free以后其地址仍然不变(非NULL) ...

  2. vscode+Firefox实现前端移动真机测试

    需要配件: 1.安装有火狐浏览器的移动端(手机); 2.安装有火狐浏览器和vscode的pc(电脑); 3.在vscode安装Live Server 插件 4.安装之后vscode右下角会有Go Li ...

  3. iOS数组排序 请求后,数组元素的排序 时间戳,最热,点赞数等

    [ZOYSessionManager dataWithUrlString:GetVideoDataComment andParameter:@{@"id":userID,@&quo ...

  4. 使用SDWebImage加载大量图片后造成内存泄露的解决办法

    SDWebImage的知名度就不用说了,github上近10k的star,国内外太多的App使用其进行图片加载. 但是最近在使用过程中发现,在UITableView中不断加载更多的内容,使用SDWeb ...

  5. 线性回归 Linear regression(1)线性回归的基本算法与求解

    本系列内容大部分来自Standford公开课machine learning中Andrew老师的讲解,附加自己的一些理解,编程实现和学习笔记. 第一章 Linear regression 1.线性回归 ...

  6. Jmeter用表格查看结果

    Sample#:编号类似id Start Time:开始时间 Thread Name:线程名称 Label:请求名称 Sample Time:取样时间ms Status:状态 Bytes:接受字节数 ...

  7. 利用ajax完成项目图册上传删除【实际项目】

    [项目页面效果] [前台jsp页面] jsp的js代码 <script type="text/javascript"> //上传项目图片 function upload ...

  8. 每天一个linux命令:【转载】rmdir命令

    今天学习一下linux中命令: rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的.(注意,rm - r dir命令可代替rmdir,但是有很大危险性.)删 ...

  9. java project 项目在 linux 下面部署方法

    1.前提是安装好了响应的开发和部署环境,例如jdk. 2.在Linux下运行可执行Jar包,首先准备jar包,一般的编译工具Eclipse,jbuilder都提供export功能,可以生成jar包. ...

  10. Luogu 4149 Race

    Luogu 4149 Race 用点分治解决. 点分治在计算路径贡献时,为了不统计在一颗子树中的路径,解决方法一种是容斥,但在这种求最值问题中不便用容斥来撤销. 另一种则是,处理一颗子树时,只考虑前面 ...