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);
}
相关推荐
mmz12073 分钟前
分治算法(c++)
c++·算法
XiaoFan01210 分钟前
将有向工作流图转为结构树的实现
java·数据结构·决策树
睡一觉就好了。22 分钟前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
齐落山大勇27 分钟前
数据结构——单链表
数据结构
Tansmjs1 小时前
C++编译期数据结构
开发语言·c++·算法
金枪不摆鳍1 小时前
算法-字典树
开发语言·算法
diediedei1 小时前
C++类型推导(auto/decltype)
开发语言·c++·算法
皮皮哎哟1 小时前
深入浅出双向链表与Linux内核链表 附数组链表核心区别解析
c语言·数据结构·内核链表·双向链表·循环链表·数组和链表的区别
独断万古他化1 小时前
【算法通关】前缀和:从一维到二维、从和到积,核心思路与解题模板
算法·前缀和
loui robot1 小时前
规划与控制之局部路径规划算法local_planner
人工智能·算法·自动驾驶