A (1087) : DS单链表--类实现

Description

用C++语言和类实现单链表,含头结点

属性包括:data数据域、next指针域

操作包括:插入、删除、查找

注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据

类定义参考

cpp 复制代码
#include<iostream>
using namespace std;
#define ok 0
#define error -1

// 链表结点定义
class ListNode
{
public:
    int data;
    ListNode *next;
    ListNode() {next = NULL;}
};
// 带头结点的单链表类定义
class LinkList
{
public:
    ListNode *head;
    int len;
    // 操作定义
    LinkList();
    ~LinkList();
    ListNode *LL_index(int i);      // 返回第i个结点的指针,如果不存在返回NULL
    int LL_get(int i);              // 获取第i个元素的数据
    int LL_insert(int i, int item); // 把数值item插入第i个位置
    int LL_del(int i);              // 删除第i个结点
    void LL_display();              // 输出单链表的内容
};
LinkList::LinkList()
{
    head = new ListNode();
    len = 0;
}
LinkList::~LinkList()
{
    ListNode *p, *q;
    p = head;
    while(p != NULL)
    {
        q = p;
        p = p->next;
        delete q;
    }
    len = 0;
    head = NULL;
}
void LinkList::LL_display()
{
    ListNode *p;
    p = head->next;
    while(p)
    {
        cout << p->data << ' ';
        p = p->next;
    }
    cout << endl;
}

Input

  • 第1行先输入n表示有n个数据,接着输入n个数据
  • 第2行输入要插入的位置和新数据
  • 第3行输入要插入的位置和新数据
  • 第4行输入要删除的位置
  • 第5行输入要删除的位置
  • 第6行输入要查找的位置
  • 第7行输入要查找的位置

Output

数据之间用空格隔开,

第1行输出创建后的单链表的数据

每成功执行一次操作(插入或删除),输出执行后的单链表数据

每成功执行一次查找,输出查找到的数据

如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表

Sample

AC代码:

cpp 复制代码
#include<iostream>
using namespace std;
#define ok 0
#define error -1

// 链表结点定义
class ListNode
{
public:
    int data;
    ListNode* next;
    ListNode() { next = NULL; }
};
// 带头结点的单链表类定义
class LinkList
{
public:
    ListNode* head;
    int len;
    // 操作定义
    LinkList();
    ListNode* LL_index(int i) {};      // 返回第i个结点的指针,如果不存在返回NULL
    void LL_get(int i) {
        if (i <= 0 || i > len ) {
            cout << "error" << endl;
        }
        else {
            ListNode* p;
            p = head;
            for (int j = 0; j < i; j++) {
                p = p->next;
            }
            cout << p->data << endl;
        }
    };              // 获取第i个元素的数据
    void LL_insert(int i, int item) {
        if (i <= 0 || i > len + 1) {
            cout << "error" << endl;
        }
        else {
            ListNode* p;
            p = head;
            for (int j = 1; j < i; j++) {
                p = p->next;
            }
            ListNode* s = new ListNode;
            s->data = item;
            s->next = p->next;
            p->next = s;
            p = s;
            len++;
            LL_display();
        }
    }; // 把数值item插入第i个位置
    void LL_del(int i) {
        if (i <= 0 || i > len) {
            cout << "error" << endl;
        }
        else {
            ListNode* p;
            p = head;
            for (int j = 1; j < i; j++) {
                p = p->next;
            }
            p->next = p->next->next;
            LL_display();
            len--;
        }
    };              // 删除第i个结点
    void LL_display();              // 输出单链表的内容
};
LinkList::LinkList()
{
    head = new ListNode();
    len = 0;
}
void LinkList::LL_display()
{
    ListNode* p;
    p = head->next;
    while (p)
    {
        cout << p->data << ' ';
        p = p->next;
    }
    cout << endl;
}

int main() {
    int t;
    int data;
    cin >> t;
    LinkList L;
    ListNode* p;
    p = L.head;
    while (t--) {
        ListNode* s = new ListNode;
        L.len++;
        cin >> data;
        s->data = data;
        s->next = p->next;
        p->next = s;
        p = p->next;
    }
    L.LL_display();
    int i, item;
    cin >> i >> item;
    L.LL_insert(i, item);
    cin >> i >> item;
    L.LL_insert(i, item);
    cin >> i;
    L.LL_del(i);
    cin >> i;
    L.LL_del(i);
    cin >> i;
    L.LL_get(i);
    cin >> i;
    L.LL_get(i);
}
相关推荐
燃于AC之乐19 分钟前
我的算法修炼之路--4 ———我和算法的爱恨情仇
算法·前缀和·贪心算法·背包问题·洛谷
MM_MS6 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E6 小时前
【二分法】寻找峰值
算法
mit6.8247 小时前
位运算|拆分贪心
算法
ghie90907 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9987 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
Z1Jxxx7 小时前
加密算法加密算法
开发语言·c++·算法
乌萨奇也要立志学C++8 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
vyuvyucd8 小时前
C++引用:高效编程的别名利器
算法