Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SIAOD / Списики / Списки отчёт.doc
Скачиваний:
8
Добавлен:
20.03.2015
Размер:
110.08 Кб
Скачать

Лабораторная работа №2.

Тема: Списки.

Одномерный список.

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

class cls_list{

private:

struct list{

int number;

list *next;

};

list *head;

public:

cls_list(int n);

void output();

void Delete(int del_place, int n);

void add(int add_place, int &n, int number);

int if_empty();

~cls_list();

};

void main(){

clrscr();

cls_list *object=NULL;

int n;

while(1){

cout<<endl<<"1-vvod"<<endl;

cout<<"2-vivod"<<endl;

cout<<"3-dobavit'"<<endl;

cout<<"4-udalit' 1 element"<<endl;

cout<<"5-udalit' spisok"<<endl;

cout<<"chose=";

int chose1;

cin>>chose1;

if(chose1==1){

if(object->if_empty()==0 && object==NULL){

do{

clrscr();

cout<<"n=";

cin>>n;

}while(n<=0);

object=new cls_list(n);

}

else{

cout<<"Your list is not empty. Do you want add any new elements?\n 1-Yes\n Any key = no\n";

char chose;

cin>>chose;

if(chose == '1'){

int add_place, number;

do{

clrscr();

cout<<"Na mesto kakogo elementa dobavit'?";

cin>>add_place;

cout<<"n=";

cin>>number;

}while(add_place-1 > n || add_place <=0);

object->add( add_place, n, number);

}

}

}

else if(chose1 == 2){

if(object==NULL)

cout<<"Your list is empty\n";

else

object->output();

getch();

}

else if(chose1==3){

if(object==NULL)

cout<<"Your list is empty\n";

else{

Int add_place, number;

do{

clrscr();

cout<<"Na mesto kakogo elementa dobavit'?";

cin>>add_place;

cout<<"n=";

cin>>number;

}while(add_place-1 > n || add_place <=0);

object->add( add_place, n, number);

}

getch();

}

else if(chose1 == 4){

if(object==NULL)

cout<<"Your list is empty\n";

else{

int del_place;

do{

clrscr();

cout<<"Which element is delete?: ";

cin>>del_place;

}while(del_place > n || del_place < 0);

object->Delete( del_place, n);

}

getch();

}

else if(chose1 == 5){

if(object==NULL)

cout<<"Your list is empty\n";

else

delete object;

object=NULL;

}

else{

delete object;

exit(1);

}

}

if(!object->if_empty())

delete object;

}

cls_list::cls_list(int n){

head=new list;

int i=1;

list *p;

p=head;

while(i<n){

cout<<"Input number: ";

cin>>p->number;

i++;

p->next=new list;

p=p->next;

}

cout<<"Input number: ";

cin>>p->number;

p->next=NULL;

}

cls_list::~cls_list(){

list *p;

while(head!=NULL){

p=head;

head=head->next;

delete p;

}

}

void cls_list::add(int add_place, int &n, int number){

list *temp=new list;

temp->number=number;

if(add_place==1){

temp->next=head;

head=temp;

}

else{

list *prev_p;

list *p;

prev_p=head;

p=head->next;

for(int i=1;i<add_place-1;i++){

prev_p=prev_p->next;

p=p->next;

}

prev_p->next=temp;

temp->next=p;

}

n++;

}

void cls_list::output(){

list *p=head;

while(p!=NULL){

cout<<p->number<<" ";

p=p->next;

}

}

void cls_list::Delete(int del_place, int n){

if(del_place <= n && del_place > 0){

list *p;

p=head;

n--;

if(del_place == 1){

head=head->next;

delete p;

}

else{

list *prev_p;

prev_p=head;

p=p->next;

int i=2;

while(i != del_place){

p=p->next;

prev_p=prev_p->next;

i++;

}

prev_p->next=p->next;

delete p;

}

}

}

int cls_list::if_empty(){

if(head->next == NULL) return 0;

else return 1;}

Скрин.

Ввод и вывод.

Циклический односвязный список.

#include<iostream.h>

#include<conio.h>

class _1svz{

private:

struct list{

int num;

list* next;

};

list* head,* tail;

public:

_1svz(int n);

~_1svz();

Void output();

void add(int add_place, int &n);

void Del(int del_place, int &n);

};

Void main(){

int n;

do{

clrscr();

cout<<"Vvedite kol-vo elementov n=";

cin>>n;

}while(n<=0 || n>100);

_1svz *object=new _1svz(n);

object->output();

cout<<endl;

int exit=1;

while(exit == 1){

clrscr();

cout<<"1-dobaviti"<<endl;

cout<<"2-udaliti"<<endl;

cout<<"3-vivod"<<endl;

cout<<"Pres any another keys for exit"<<endl;

char chose;

chose=getch();

cout<<chose<<endl;

switch(chose){

case '1':

int add_place;

do{

cout<<"Vvedite posle kakogo el-ta dobaviti novii element: add_place=";

cin>>add_place;

}while(add_place>n || add_place<0);

object->add(add_place,n);

object->output();

break;

case '2':

Int del_place;

do{

cout<<"Vvedite kakoi element udaliti: del_place=";

cin>>del_place;

}while((del_place>n || del_place<0) && n != 0);

if( n != 0){

object->Del( del_place, n);

object->output();

}

else

cout<<"Spisok pust";

break;

case '3':

object->output();

default:

exit=0;

break;

}

getch();

}

delete object;

}

void _1svz::Del(int del_place, int &n){

list *p=head;

if(del_place == 1){

head=head->next;

tail->next=head;

delete p;

}

else{

list *prev_p=head;

p=p->next;

int i=2;

while(i != del_place){

p=p->next;

prev_p=prev_p->next;

i++;

}

prev_p->next=p->next;

delete p;

if(i == n){

tail=prev_p->next;

tail->next=head;

}

}

n--;

}

_1svz::_1svz(int n){

int y;

list *p=new list;

head=p;

cout<<endl;

for(int i=0; i<n ;i++){

cout<<"num=";

cin>>p->num;

p->next=new list;

p=p->next;

tail=p;

}

tail->next=head;

}

void _1svz::output(){

list *p=head;

while(p->next!=head){

cout<<p->num<<" ";

p=p->next;

}

}

void _1svz::add(int add_place,int &n){

list *p=head;

list *t=new list;

cout<<"Vvedite el-t: num=";

cin>>t->num;

if(add_place!=0){

for(int i=1;i<add_place;i++)

p=p->next;

t->next=p->next;

p->next=t;

if(add_place==n)

tail=t;

}

if(add_place==0){

tail->next=t;

t->next=p;

head=t;

}

n++;

}

_1svz::~_1svz(){

list *p;

while(head!=tail){

p=head;

head=head->next;

delete p;

}

delete tail;

}

Скрины.

Двусвязный список.

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

class cls_list{

private:

struct list{

int number;

list *next;

list *prev;

};

list *head, *tail;

public:

cls_list(int n);

void output();

void Delete(int del_place, int &n);

void add(int add_place, int &n, int number);

int if_empty();

~cls_list();

};

void main(){

clrscr();

cls_list *object=NULL;

int n;

while(1){

cout<<"1 - vvod"<<endl;

cout<<"2 - vivod"<<endl;

cout<<"3 - dobavit'"<<endl;

cout<<"4 - udalit' 1 element"<<endl;

cout<<"5 - udalit' spisok"<<endl;

cout<<"chose=";

cin>>chose1;

if(chose1 == 1){

if(object->if_empty()==0 && object==NULL){

do{

clrscr();

cout<<"n=";

cin>>n;

}while(n<=0);

object=new cls_list(n);

}

else{

cout<<"Your list is not empty. Do you want add any new elements?\n 1-Yes\n Any key = no\n";

char chose;

cin>>chose;

if(chose == '1'){

Соседние файлы в папке Списики