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 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
随机推荐
- css移动元素的几种方法
一.当然是元素设定为postion: absolute, 然后控制 left, top 位置 二.元素增加overflow属性,然后设置元素的scrollLeft, scrollRight当做滚动条来 ...
- Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件
Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件 前面我写了一篇博文Shell 从日志文件中选择时间段内的日志输出到另一个文件,利用循环实现了我想要实现的内容. 但是用这个脚本的同 ...
- MySQL 大表在线DML神器--pt-online-schema-change
一个朋友问我在线对大表进行ddl操作,如何做能尽量避免主从延迟以及不影响在线dml操作呢?我想到一个开源的pt-online-schema-change工具,测试了吧,效果还可以. pt-online ...
- python2 使用matplotlib
背景 由於pyh在python3上沒法兒用,所以只能在python2上用pyh2 相應地也要在python2上使用matplotlib 下載 有兩種方法,pip & dnf pip爲: pip ...
- 一些Fibonacci数列的神奇性质【数学】
递推式: \(f_i=1 (1\leq i\leq 2)\) \(f_i=f_{i-1}+f_{i-2}(i>2)\) 一些性质 \(\sum_{i=1}^n f_i=f_{n+2}-1\) \ ...
- Hive SQL的编译过程[转载自https://tech.meituan.com/hive-sql-to-mapreduce.html]
https://tech.meituan.com/hive-sql-to-mapreduce.html Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hi ...
- hadoop入门手册3:Hadoop【2.7.1】初级入门之命令指南
问题导读1.hadoop daemonlog管理员命令的作用是什么?2.hadoop如何运行一个类,如何运行一个jar包?3.hadoop archive的作用是什么? 概述 hadoop命令被bin ...
- 重温CLR(十六) CLR寄宿和AppDomain
寄宿(hosting)使任何应用程序都能利用clr的功能.特别要指出的是,它使现有应用程序至少能部分使用托管代码编写.另外,寄宿还为应用程序提供了通过编程来进行自定义和扩展的能力. 允许可扩展性意味着 ...
- 《DSP using MATLAB》示例Example 8.22
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- 如何在aspx.cs 里面获取html 控件值
aspx 页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default. ...