Untitled
unknown
c_cpp
4 years ago
3.4 kB
6
Indexable
struct element{
int data;
element *next = nullptr;
};
struct single_list{
element *head = nullptr;
element *tail = nullptr;
int counter = 0;
};
// dodanie elementu na poczatek listy
void add_head(single_list &list, int value){
element *el = new element;
el->data = value;
el->next = list.head;
if( list.head == nullptr ){
list.tail = el;
}
list.head = el;
list.counter++;
}
// dodanie elementu na koniec listy
void add_tail(single_list &list, int value){
element *el = new element;
el->data = value;
if(list.tail != nullptr){
list.tail->next = el;
}
else{
list.head = el;
}
list.tail = el;
list.counter++;
}
// dodanie elementu na wskazana pozycje
void add_to_pos(single_list &list, int val, int pos){
if( list.head == nullptr ){
cout << "List empty\n" << endl;
return;
}
if ( pos == 0){
add_head(list, val);
}
else if( pos == list.counter ){
add_tail(list, val);
}
else{
element *iter = list.head;
for( int i=0; i<pos-1; i++ ){
iter=iter->next;
}
}
}
// usuniecie elementu z poczatku listy
void delete_head(single_list &list){
element *temp = list.head;
list.head = list.head->next;
delete temp;
if(list.head == nullptr){
list.tail = nullptr;
}
list.counter--;
}
// usuniecie elementu z konca listy
void delete_tail(single_list &list){
if( list.tail == nullptr ){
cout << "List is empty" << endl;
return;
}
element *iter = list.head;
if( iter == list.tail ){
delete list.tail;
list.head = nullptr;
list.tail = nullptr;
}
else{
while( iter->next != list.tail ){
iter = iter->next;
}
delete list.tail;
list.tail = iter;
list.tail->next = nullptr;
}
list.counter--;
}
// usuniecie elementu z wskazanej pozycji
void delete_from_pos(single_list &list, int pos){
if( pos >= list.counter || pos < 0 ){
cout << "Bledny numer pozycji" << endl;
return;
}
if( pos == 0 ){
delete_head(list);
}
else if( pos == list.counter-1 ){
delete_tail(list);
}
else{
element *iter = list.head;
for(int i=0; i<pos-1; i++){
iter = iter->next;
}
element *buf = iter->next;
iter->next = buf->next;
delete buf;
list.counter--;
}
}
// wyswietlenie wartosci elementu z danej pozycji
element *find_pos(single_list &list, int pos){
if( pos >= list.counter || pos < 0 ){
cout << "Wrong position" << endl;
}
element *iter = list.head;
for(int i=0; i<pos; i++){
iter = iter->next;
}
cout << iter->data << endl;
}
// wyswietlenie calej listy
void print_single_list(single_list list){
element *counter = list.head;
while( list.head != nullptr ){
cout << counter->data << "\t";
counter = counter->next;
}
}
// usuniecie calej listy
void delete_list(single_list &list){
while( list.head != nullptr ){
element *buf = list.head;
list.head = list.head->next;
delete buf;
}
list.tail = nullptr;
list.counter = 0;
}Editor is loading...