C++ 单链表操作总结
第一、单链表的定义和操作
#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++ 单链表操作总结的更多相关文章
- 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏
数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
- c语言实现--带头结点单链表操作
可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址 ...
- C单链表操作
#include <stdio.h> #include <stdlib.h> #define ElemType int #define Status int #define O ...
- c语言实现--不带头结点的单链表操作
1,不带头结点的单链表操作中,除了InitList(),GetElem(),ListInsert(),ListDelete()操作与带头结点的单链表有差别外,其它的操作基本上一样. 2,不带头结点单链 ...
- C语言,单链表操作(增删改查)(version 0.1)
这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...
- 【数据结构与算法】单链表操作(C++)
#include <stdio.h> #include <malloc.h> /*单链表节点定义*/ typedef struct LNode { int data; //da ...
- C++单链表操作
#include <stdio.h> typedef struct _Node{ int value; _Node *next;}Node; void AddNodeTail(No ...
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
随机推荐
- 数据库连接池----Druid配置详解
什么是连接池? 数据库连接池出现的原因在数据库连接资源的低效管理,使用数据库连接池是基于设计模式中的资源池的概念,从而解决资源频繁是分配.释放所造成的问题. 数据库连接池的基本思想就是为数据库连接建立 ...
- BJOI 2019 模拟赛 #2 题解
T1 完美塔防 有一些空地,一些障碍,一些炮台,一些反射镜 障碍会挡住炮台的炮, 反射镜可以 90° 反射炮台的光线,炮台可以选择打他所在的水平一条线或者竖直一条线 求是否有一组方案满足每个空地必须要 ...
- threejs Object的点击(鼠标)事件(获取点击事件的object)
objects=[]; raycaster = new THREE.Raycaster(); mouse = new THREE.Vector2(); //监听全局点击事件,通过ray检测选中哪一个o ...
- mysql拼接多条查询结果并且加序列
SELECT GROUP_CONCAT(a.DESCRIPTION SEPARATOR '\n') FROM (SELECT (@rowNum:=0) AS rowNo,CONCAT('公司内 ...
- Java Garbage Collection
在C/C++中,需要自己负责object的creation 和 destruction. 如果忘记了destruction, 就容易出现OutOfMemoryErrors. Java中会有GC直接处理 ...
- ldo的一些参数理解
psrr是衡量ldo抑制外来信号噪声的能力,而内部噪声是由基准电压和误差放大器引入的.通常器件手册说的输出噪声指的就是内部噪声. ldo的暂态响应也是一个重要指标
- kubectl&docker容器命令行窗口太小
#k8s kubectl exec -ti busybox env COLUMNS=$COLUMNS LINES=$LINES bash #k8s example kubectl exec -t ...
- [LeetCode系列]3元素最近和问题的O(n^2)解法
给定一个整数数组(长度不小于3) 和 一个目标值, 从数组中找出3个元素, 使得它们的和与目标值最接近, 返回这个和. 可以认为每个输入的组合都是只有唯一解的. 解法思路参考: Finding thr ...
- phpMyAdmin“缺少 mcrypt 扩展。请检查 PHP 配置。”解决办法
在ecmall二次开发中因php版本要求低于5.3,而如下更新要求升级PHP,所以以下方式不适合于ecmall商城项目. 解决办法:安装php-mcrypt libmcrypt libmcrypt-d ...
- python中format函数学习笔记
简而言之,format函数就是用{}来代替之前的输出字符时使用的% print('my name is %s and I am %d years old' % ('porsche',23)) 下面详细 ...