2024/11/13日工作总结

完成数据结构实验作业:

7-2 双向循环链表应用
分数 20
作者 liudan
单位 石家庄铁道大学
已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,实现交换p所指向的结点和它的前缀结点的顺序。

输入格式:
第一行输入元素个数,第二行输入元素值,第三行输入要交换的元素值,第四行输出结果。

输出格式:
输出交换后的结果,中间不用空格分隔,若要交换的值:4,不在数组终,则输出“未找到4”

输入样例:
在这里给出一组输入。例如:

6
1 2 3 4 5 6
6
输出样例:
在这里给出相应的输出。例如:

123465

点击查看代码
#include<iostream>
using namespace std;

struct Node{
    int data;
    Node* pre;
    Node* next;

    Node(int value):data(value),pre(nullptr),next(nullptr){}
};

class List{
private:
    Node* head;

public:
    List():head(nullptr){}

    void insert(int data){
        Node* newNode = new Node(data);
        if(!head){
            head = newNode;
            head->pre = head;
            head->next = head;
        }else{
            Node* last = head->pre;
            last->next = newNode;
            newNode->pre = last;
            newNode->next = head;
            head->pre = newNode;
        }
    }

    Node* select(int value){
        if(!head) return nullptr;

        Node* current = head;
        do{
            if(current->data == value) return current;
            current = current->next;
        }while (current != head);
        return nullptr;
    }
    
    int swap(int value){
        Node* p = select(value);
        if(!p || p == head){
            if(!p){
                cout<<"未找到"<<value<<endl;
            }
            return 0;
        }

        Node* preNode = p->pre;
        Node* nextNode = p->next;

        preNode->next = nextNode;
        nextNode->pre = preNode;
        preNode=preNode->pre;
        nextNode=nextNode->pre;

        preNode->next=p;
        p->pre=preNode;

        p->next=nextNode;
        nextNode->pre=p;

        if(nextNode == head)
            head = p;
        return 1;
    }

    void display(){
        if(!head) return;
        Node* current = head;
        do{
            cout<<current->data;
            current = current->next;
        }while(current != head);
    }

    ~List(){
        if(!head) return;

        Node* current = head;
        Node* nextNode;
        do{
            nextNode = current->next;
            delete current;
            current = nextNode;
        }while(current != head);
    }
};

int main(){
    int n;
    cin>>n;

    List list;
    for(int i = 0;i < n;i++){
        int value;
        cin>>value;
        list.insert(value);
    }

    int N;
    cin>>N;

    int flag = list.swap(N);
    if(flag)
        list.display();
    return 0;
}
posted @ 2024-11-18 23:00  张黎健  阅读(3)  评论(0编辑  收藏  举报