解题思路:

注意事项:

参考代码:

#include<iostream>

using namespace std;


//数字链表结点定义

typedef struct Num{

    int number;

    struct Num *next;

    int length;

}num,*N;


//字符串链表结点定义

typedef struct Str{

    string operation;

    int place;

    int elem;

    struct Str *next;

}str,*S;


//定义操作函数

void show(num *object)

{

    num *temp = object->next;

    if(temp == NULL)

    {

        cout << "Link list is empty" << endl;

    }

    else

    {

        while(temp != NULL)

        {

            cout << temp->number << " ";

            temp = temp->next;

        }

        cout << endl;

    }

    

}//show函数



void del(str *check,num *object)

{

    if(check->place < 1 || check->place > object->length)

    {

        cout << "delete fail" << endl;

    }

    else

    {

        num *pre = object;

        num *temp = object->next;

        for(int i =0;i < (check->place - 1);i++)

        {

            pre = temp;

            temp = temp->next;

        }

        pre->next = temp->next;

        delete temp;

        --object->length;

        cout << "delete OK" << endl;

    }

    

}//delete函数



void insert(str *check,num *object)

{

    

    if(check->place < 1 || check->place > object->length)

    {

        if(check->place == 1)

        {

            num *new_node = new num;

            new_node->number = check->elem;

            new_node->next = object->next;

            object->next = new_node;

            ++object->length;

            cout <<"insert OK" << endl;

            return;

        }

        else

        {cout << "insert fail" << endl;}

    }

    else

    {

        num *temp = object;

        for(int i = 0;i < (check->place - 1);i++)

        {

            temp = temp->next;

        }

        num *new_node = new num;

        new_node->number = check->elem;

        new_node->next = temp->next;

        temp->next = new_node;

        ++object->length;

        cout << "insert OK" << endl;

    }

}//insert函数



void get(str *check,num *object)

{

    if(check->place < 1 || check->place > object->length)

    {

        cout << "get fail" << endl;

    }

    else

    {

        num *temp = object;

        for(int i = 0; i < check->place;i++)

        {

            temp = temp->next;

        }

        cout << temp->number << endl;

    }

}//get函数


int main()

{

    //创建数字链表

    int num_length = 0;

    cin >> num_length;//第一个数字为链表长度

    N num_head = new num;

    num_head->next = NULL;

    num_head->length = 0;//创建头结点

    num *ntail = num_head;//创建为指针

    for(int i = 0;i < num_length;i++)

    {

        num *p = new num;

        cin >> p->number;

        ntail->next = p;

        ntail = p;

        p->next = NULL;

        ++num_head->length;

    }//结点输入

        

    //创建操作字符串链表

    int str_length;

    cin >> str_length;

    S str_head = new str;

    str_head->next = NULL;

    str *htail = str_head;

    for(int i = 0;i < str_length;i++)

    {

        str *q = new str;

        cin >> q->operation;

        if(q->operation == "get" || q->operation == "delete")

        {

            cin >> q->place;

        }

        else if(q->operation == "insert")

        {

            cin >> q->place;

            cin >> q->elem;

        }

        htail->next = q;

        htail = q;

        q->next = NULL;

    }

    

    //遍历字符串操作链表,调用对应函数

    str *check = str_head->next;

    for(int i = 0;i < str_length;i++)

    {

        if(check->operation == "show")

        {

            show(num_head);

        }

        else if(check->operation == "delete")

        {

            del(check,num_head);

        }

        else if(check->operation == "get")

        {

            get(check,num_head);

        }

        else if(check->operation == "insert")

        {

            insert(check,num_head);

        }

        check = check->next;

    }

    

    //释放链表内存

    num *del_num = num_head->next;

    while(del_num != NULL)

    {

        num *next_del_n = del_num->next;

        delete del_num;

        del_num = next_del_n;

    }

    delete num_head;

    

    str *del_str = str_head->next;

    while(del_str != NULL)

    {

        str *next_del_s = del_str->next;

        delete del_str;

        del_str = next_del_s;

    }

    delete str_head;

    

    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论