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

Description

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

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

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

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

类定义参考

#include
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

A (1087) : DS单链表--类实现_第1张图片

 

 AC代码:

#include
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);
}

你可能感兴趣的:(数据结构,C++,算法,数据结构)