1

Тема: Подвоєння символу в однонаправленому кільцевому списку

Завдання - сформувати однонаправлений кільцевий список і провести подвоєння літери “Т” у ньому. Видрукувати обидва списки. Проблема в тому, що всі символи "Т" подвоюються, окрім першого, перед ним з'являється символ "P".

Прихований текст
#include<iostream>
#include<conio.h>
#include<string.h>
#include<clocale>
#define n 5

using namespace std; 
using std::cout;
using std::endl;
using std::cin;

struct A
{
    char C;
};
struct elem
{
    A data;
    elem *next;
};
void init(elem **first){
    *first=new elem;
    (*first)->next=NULL;
    elem *end=*first;
    A b[n]={'A','T','R','T','T'};
    
    for(int i=0;i<=n;i++)
    {
        end->next=new elem;
        end=end->next;
        end->data=b[i];
        end->next=NULL;
    }
}

void print (elem *b){
    elem *print=b;
    while(print){
        cout<<print->data.C;
        cout<<"-";
        print=print->next;
    }
    cout<<"NULL";
    cout<<"\n";
}

void insert (elem **first,A &C){
    elem * inser=new elem;
    inser->data.C;
    if(*first==NULL){
        inser->next=NULL;
        *first=inser;
        return;
    }
    elem *e=*first;
    if(e->data.C=='T')
    {
        inser->next=e;
        *first=inser;
        return;
    }
    elem *e1=e->next;
    while (e1){
        if(e1->data.C=='T'){
            e->next=inser;
            inser->next=e1;
            inser=new elem;
            inser->data=C;
        }
        e=e1;
        e1=e->next;
    }
}
int main()
{
    elem *first=NULL;
    A data={'T'};
    init(&first);
    print(first);
    insert(&first,data);
    print(first);
    return 0;
}
Post's attachments

Lab4.txt 1.16 kb, 413 downloads since 2017-03-16 

2

Re: Подвоєння символу в однонаправленому кільцевому списку

Додаю вам код правильно - вперше і востаннє.

3

Re: Подвоєння символу в однонаправленому кільцевому списку

По суті - дуже раджу вам виділити функцію для додавання елементу в список і використовувати її, а не робити це вручну в кожній функції. Дуже легко тут заплутатися.