1.算法描述
数据结构与算法分析C++版:3.11
实现一个有序单链表,要求能返回链表大小,打印链表,检测x是否在链表(在则删除,否则添加)
2.实现
List.h
#ifndef LIST_H
#define LIST_H
#include <iostream>
template<class T>
struct Node{
Node<T>* next;
T data;
};
template<class T>
class List{
public:
List(){
len = 0;
first = new Node<T>;
first->next = NULL;
}
List(T a[], int n){
len = 0;
first = new Node<T>;
first->next = NULL;
for(int i=0; i<n; i++){
//有序插入元素
insertData(a[i]);
}
}
~List(){ release(); };
//长度
int length(){
return len;
}
//长度(通过遍历链表)
int getLength(){
int length=0;
Node<T>* r = first->next;
while(r){
length++;
r = r->next;
}
return length;
}
//打印链表
void printList(){
Node<T>* r = first->next;
std::cout<<"[";
while(r){
std::cout<<r->data<<" ";
r = r->next;
}
std::cout<<"]"<<std::endl;
}
//检测元素是否存在
bool isExsit(T x){
Node<T> *r = first->next;
bool b = true;
while(r && r->data != x){
r = r->next;
}
if(!r){
b = false;
}
return b;
}
//添加或删除存在元素(存在则删除,不存在则添加)
void findAddOrDelete(T x){
Node<T> *r = first->next, *p=first, *t;
while(r && r->data != x){
p = r;
r = r->next;
}
if(!r){
insertData(x);
}else{
//因为序列是有序的,删除连续相同的x
while(r && r->data == x){
t = r;
p->next = t->next;
delete t;
r = p->next;
len--;
}
}
}
//有序插入元素
void insertData(T x){
Node<T> *t = first->next, *p=first;
Node<T> *r = new Node<T>;
r->data = x;
r->next = NULL;
while(t && t->data < x){
p = t;
t = t->next;
}
p->next = r;
r->next = t;
len++;
}
private:
Node<T>* first;
int len;//存储链表长度
void release(){
Node<T> *r = first;
while(r->next){
Node<T> *t = r->next;
r->next = t->next;
delete t;
}
first->next = NULL;
}
};
#endif
main.cpp
#include <iostream>
#include "list.h"
using namespace std;
int main( ){
int a[] = {3,11,2,8,4,5,3,6,8,8,8};
List<int> l(a, 11);
cout<<"length:"<<l.length()<<endl;
l.printList();
cout<<l.isExsit(32)<<" "<<l.isExsit(8)<<endl;
l.findAddOrDelete(7);
cout<<"length:"<<l.length()<<endl;
l.printList();
l.findAddOrDelete(8);
cout<<"length:"<<l.length()<<endl;
l.printList();
return 0;
}
3.总结
难度没什么,主要是考察链表的基本操作,边界检查,尤其是使用指针的时候尤其注意,指针检查!
4.删除
- 大小: 8.7 KB
分享到:
相关推荐
单链表是数据结构中最基础的一种,它是一种线性数据结构,由一系列节点(也称为元素)组成,每个节点包含两个...在学习和实践中,不断挑战自己,尝试实现不同的操作,可以加深对数据结构和算法的理解,提升编程技能。
4.熟练掌握简单的演示菜单与人机交互设计方法。 二、实验内容 1. 编制一个演示单链表插入、删除、查找等操作的程序。 三、实验步骤 1.需求分析 本演示程序用JAVA编写,完成单链表的生成,任意位置的插入、删除,...
循环单链表是一种常见的数据结构,它在C语言中被广泛用于实现各种算法和数据管理。循环单链表与普通单链表的主要区别在于最后一个节点的指针不再为NULL,而是指向...通过实践和代码分析,你可以进一步巩固这些知识。
例如,在C++中,可以这样定义一个简单的单链表节点: ```cpp struct ListNode { int val; // 数据域 ListNode* next; // 指针域 ListNode(int x) : val(x), next(NULL) {} // 构造函数 }; ``` 同时,为了方便...
**选择排序**在链表中实现较为简单,因为它不需要额外的内存来交换元素,只需要修改节点之间的链接。然而,其时间复杂度为O(n^2),在处理大规模数据时效率较低。 ### 总结 单链表排序是数据结构与算法学习中的一个...
单链表作为最简单、最常见的数据结构之一,是每位程序员都应该掌握的基本技能。本文以“我的Java单链表练习”为主题,通过博主baby69yy2000在iteye上的博客分享,深入探讨了Java中实现单链表的相关知识。 首先,...
单链表是计算机科学中一种...通过实践和分析科大版的数据结构代码,初学者不仅可以掌握单链表的基本概念,还能学习到如何在实际编程中有效地使用这种数据结构,从而为后续更复杂的算法和数据结构学习打下坚实的基础。
以下是一个简单的C++单链表选择排序的实现: ```cpp #include "sort.h" void selectionSort(ListNode*& head) { if (head == nullptr || head->next == nullptr) { return; } ListNode* minNode = head; ...
在这个“数据结构单链表实例一个简单的小程序”中,我们可以推测作者实现了一个用C语言编写的单链表操作程序,可能包括创建、插入、删除和遍历等基本操作。 单链表的特点在于它的每个节点只有一个指向后继节点的...
单链表作为数据结构的基础部分,具有简单灵活的特点,常用于实现动态数据集合。本节将深入探讨单链表的算法,包括其定义、基本操作以及在实际问题中的应用。 单链表是由一系列节点组成的数据结构,每个节点包含两...
对于单链表的倒序,操作相对简单,主要涉及节点间的指针关系调整。而排序则稍微复杂,需要理解排序算法并将其应用于链表结构。 总结起来,"single_link_list.c"和"order_link.c"这两个文件展示了如何在C语言中处理...
在这个主题中,我们将专注于单链表,一种简单但重要的数据结构。单链表在许多算法和程序设计中都有广泛的应用。 单链表是一种线性数据结构,每个元素(节点)包含两部分:数据域和指针域。数据域存储实际的数据,而...
通过这样的实践,你可以更好地理解和掌握单链表的基本概念和操作。 总之,单链表是数据结构的基础,理解它的创建和操作对于学习更复杂的数据结构和算法至关重要。在这个实验中,你将学习如何创建节点、追加节点以及...
单链表的主要优点是插入和删除操作相对简单,只需要改变节点间的指针关系即可,不需要像数组那样移动元素。然而,它的缺点也很明显,如访问任意位置的元素效率较低,因为需要从头节点开始按顺序遍历到目标位置。此外...
总的来说,这个“数据结构单链表vc++演示”提供了对单链表基本操作的实践理解,包括其初始化、插入、删除、查找、判空和遍历。通过实际的编程练习,学习者可以更深入地掌握这些概念,并将它们应用于更复杂的算法和...
本文将深入探讨C语言中的单链表及其简单的操作,旨在帮助初学者理解并掌握这一概念。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两部分:数据域和指针域。数据域存储实际的数据,而指针域存储指向下...
一个简单的单链表节点通常包括两个部分:数据域(存储实际数据)和指针域(存储指向下一个节点的地址)。例如,可以定义为: ```c typedef struct Node { int data; // 数据域,这里假设数据类型为整型 struct ...
在数据结构的学习中,单链表是一种非常基础且重要的数据结构。它用于存储一组有序的数据,每个元素(称为节点)包含两部分:数据域...通过不断学习和实践,我们可以更好地理解和掌握各种数据结构,以解决更复杂的问题。
在实验中,`Listsort`函数可能使用了一种简单的排序算法,例如插入排序,通过比较相邻元素并交换它们的位置来排序链表。代码中提到的`Listsorth`函数部分似乎被截断了,完整的实现可能包含一个内部循环用于比较并...
递归是一种解决问题的方法,它将问题分解为更小的子问题,直到子问题变得足够简单可以直接解决。在计算机科学中,递归通常与函数调用自身有关。当处理链表时,递归可以用来遍历链表的每个节点,因为链表本身就是一个...