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

#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. python marshal 对象序列化和反序列化

    有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上.Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle ...

  2. Http权威指南(服务器、缓存)

    对于web服务器(软件)大家应该不会陌生,常见的web服务器有Apache.IIS.Tomcat.Nginx.Jetty等等. 1.基本功能 几乎所有的web服务器都会执行以下几项同样的任务: 1.建 ...

  3. FFmpeg再学习 -- 硬件加速编解码

    为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...

  4. Java 7 新特性try-with-resources语句

    1.什么是try-with-resources语句 try-with-resources 语句是一个声明一个或多个资源的 try 语句.一个资源作为一个对象,必须在程序结束之后随之关闭. try-wi ...

  5. java中高级面试题整理及参考答案

    面试问题: 一.Java基础方面: 1.Java面相对象的思想的理解(主要是多态): http://blog.csdn.net/zhaojw_420/article/details/70477636 ...

  6. python中的字典两种遍历方式

    dic = {"k1":"v1", "k2":"v2"} for k in dic: print(dic[K]) for ...

  7. countDown

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  8. BZOJ4517 Sdoi2016 排列计数 【DP+组合计数】*

    BZOJ4517 Sdoi2016 排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 ...

  9. objectForKey与valueForKey在NSDictionary中的差异

    从 NSDictionary 取值的时候有两个方法,objectForKey: 和 valueForKey:,这两个方法具体有什么不同呢? 先从 NSDictionary 文档中来看这两个方法的定义: ...

  10. 网站使用QQ登录问题小结

    关于网站如何使用QQ登陆这个问题就不多说了,很简单,登陆connect.qq.com找到相应的SDK,下载下来,里面会有demo,将相应的appid,appkey和回调地址callback改成自己的就 ...