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