链串---------

#include<iostream>
using namespace std;
#define dataType char


struct node
{
    dataType ch;
    node* next;
    node* prior;
};

class Link_String
{
    private:
    
    public:
    node* head; 
    int lenth;
    node* literator;
    Link_String(){
        lenth = 0;
        head = new node;
        head->ch = '#';
        head->next = nullptr;
        head->prior = nullptr;
        literator = head;
    }
    void Insert_LinkSt(Link_String st, int pos)
    {
        int i = pos;
        int j = st.lenth;

        node* sel_p = head;
        node* st_p = st.head;

        while(i--){
            sel_p = sel_p->next;
        }
        node* sel_endnext_p = sel_p->next;

        while(st_p->next != nullptr){
            node* one_node = new node;
            one_node->ch = st_p->next->ch;
            one_node->next = nullptr;
            one_node->prior = sel_p;
            sel_p->next = one_node;
            sel_p = sel_p->next;
            st_p = st_p->next;
        }
        sel_p->next = sel_endnext_p;
        sel_endnext_p->prior = sel_p;
        lenth += st.lenth;
    }
    void Insert_St(const dataType ch[], int pos){
        int i = pos;
        if(i<0 && i>lenth){
            cout<<"error"<<endl;
            return;
        }
        node* sel_literator = head;
        while(i--){
            sel_literator = sel_literator->next;
        }
        node* sel_literator_end = sel_literator->next;
        
        int j = 0;
        char c = ch[j++];
        
        while(c != '\0'){
            node* no = new node;
            no->ch = c;
            no->next = nullptr;
            no->prior = sel_literator;
            sel_literator->next = no;
            sel_literator = sel_literator->next;
            lenth++;
            c = ch[j++];
        }
        sel_literator->next = sel_literator_end;
        sel_literator_end->prior = sel_literator;
        /*if(sel_literator->next == nullptr){
            node* data = new node;
            data->ch = ch;
            data->next = nullptr;
            data->prior = sel_literator;
            sel_literator->next = data;
        }
        else{
            node* sel_literator_next = sel_literator->next;
            node* data = new node;

            data->ch = ch;
            data->next = sel_literator_next;
            data->prior = sel_literator;
            sel_literator_next->prior = data;
            sel_literator->next = data;
        } */
    }
    void InsertEnd_Data(const dataType Ch[]){

        node* sel_literator = head;
        int i = 0;
        char c = Ch[i++];


        while(sel_literator->next != nullptr){
            sel_literator = sel_literator->next;
        }

        node* data ;
        while(c != '\0'){
            data = new node;
            data->ch = c;
            data->next = nullptr;
            data->prior = sel_literator;
            sel_literator->next = data;
            
            c = Ch[i++];
            sel_literator = sel_literator->next;
            lenth++;
        }

        
    }
    void Print_String(){
        node* _literator = head->next;
        while(_literator != nullptr){
            cout<<_literator->ch;
            _literator = _literator->next;
        }
        cout<<endl;

    }

    void Dele_Data(int pos1, int pos2){
        if(pos1 > lenth || pos2 < 0){
            cout<<"error"<<endl;
            exit(-1);
        }
        if(pos1 > pos2){
            cout<<"error"<<endl;
            exit(-1);
        }
        node* sel_f = head;
        int i = pos1-1;
        int j = pos2 - i+1;
        while(i--){
            sel_f = sel_f->next;
        }
        node* sel_b = sel_f;

        while(j--){
            sel_b = sel_b->next;
        }
        node* de1 = sel_f->next;
        node* de2 = de1->next;
        for(i = 0; i< (pos2 - pos1); i++){
            delete de1;
            de1 = de2;
            de2 = de2->next;
            lenth--;
        }
        sel_f->next = sel_b;
        sel_b->prior = sel_f;
        
    }
    void Dele_Data(int pos){
        node* sel = head;
        while(pos--){
            sel = sel->next;
        }
        node* se1_2 = sel->prior;
        node* de = sel->next;
        while(de != nullptr){
            delete sel;
            sel = de;
            de = de->next;
            lenth--;
        }
        se1_2->next = nullptr;
    }

};

int main()
{

    Link_String *S = new Link_String;
    Link_String *S2 = new Link_String;
    
    S->InsertEnd_Data("658");

    S->Print_String();

    S2->InsertEnd_Data("009");
    S2->Print_String();

    S->Insert_LinkSt(*S2,1);
    S->Print_String();

    int len = S->lenth;
    S->Insert_St("12", len-2);
    S->Print_String();

    S->Dele_Data(2, 3);
    S->Print_String();

    S->Dele_Data(2);
    S->Print_String();

    cout<<"helloworld"<<endl;
    system("pause");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值