4. Бир боғламли рўйхатдан элементни ўчириш
Рўйхатда ишчи кўрсаткичи р бўлган элементдан кейинги элементни ўчирамиз.
Буни рўёбга чиқариш учун қуйидаги ишларни амалга ошириш лозим:
a) Ўчирилаётган элементни кўрсатувчи q кўрсаткични киритиш.
q=ptr(p)
b) А элементдан кейин В элементни қўйиш
ptr(p)=ptr(q)
c) Ўчирилаётган элемент info мойдонидаги информацияни ёдда сақлаш (агар зарур бўлса)
k=info(q)
d) q кўрсаткичли элементни ўчириш.
Freenode(q)
20
Натижада:
Шу алгоритм дастури:
Node* p = head;
Node* q = new Node;
int k;
cout<<"k=";cin>>k;
for(int i=0;inext;
q = p->next;
p->next = q->next;
delete(q);
Топшириқ
Вариантлар:
1.
Элементни n позицияга силжитиш дастурини тузинг.
2.
Рўйхат нусхасини яратинг.
3.
Рўйхат бошига элемент қўйиш.
4.
Иккита рўйхат бирлаштирилсин.
5.
Рўйхатнинг n-инчи элементи ўчирилсин.
6.
Рўйхат n-инчи элементидан кейин янги элемент қўйилсин.
7.
Иккита рўйхат умумий элементларидан ташкил топган рўйхат яратилсин.
8.
Рўйхат элементлари ўсиш тартибида жойлаштирилсин.
9.
Рўйхат ҳар иккинчи элементи ўчирилсин.
10.
Рўйхат ҳар учинчи элементи ўчирилсин.
11.
Рўйхат элементлари камайиш тартибида жойлаштирилсин.
12.
Рўйхат тозалансин.
13.
Футбол жамосининг 20 та ўйинчилари фамилияларидан ташкил топган халқасимон рўйхат берилган.
Ўйинчилар 2 та гурухга 10 тадан ажратилсин. Иккинчи гурухга умумий ўйинчиларни ҳар 12-инчиси
кирсин.
14.
Спортчи фамилияларидан ташкил топган иккита халқасимон рўйхат берилган. Қура ташлаш амалга
оширилсин. Биринчи гуруҳдаги ҳар n-инчи спортчи, иккинчи гуруҳдаги ҳар m-инчи спортчи билан
рақиб бўлсин.
15.
Лотеря иштирокчилари фамилиялари ва мукофотлар номларидан ташкил топган 2 та ҳалқасимон
рўйхат берилган. N та иштирокчи ғолиб бўлсин (ҳар К-инчи). Мукофотларни қайта ҳисоблаш сони - t.
16.
Ўқувчилар фамилиялари ва имтиҳон билетлари рақамларидан ташкил топган 2 та ҳалқасимон рўйхат
берилган. Ўқувчилар томонидан олинган билет рақамлари аниқлансин. Имтиҳон билетлари учун қайта
ҳисоблаш сони - Е, ўқувчилар учун эса - К.
17.
Маҳсулот номларидан ташкил топган рўйхат берилган. Рўйхат элементлари SONY фирмасида ишлаб
чиқилган маҳсулотлардан ташкил топган янги рўйхат яратинг.
18.
2 та гуруҳ талабалари фамилияларидан ташкил топган 2 та рўйхат берилган. Биринчи гуруҳ L талабаси
иккинчи гуруҳга ўтказилсин. Қайта ҳисоблашлар сони -К.
19.
BOSH ва FILIPS концернлари томонидан ишлаб чиқилган маҳсулот номларидан ташкил топган иккита
рўйхат берилган. Ҳар иккала фирма томонидан ишлаб чиқилган бир ҳил маҳсулотлар рўйхати
тузилсин.
20.
Футбол жамоасининг асосий ва заҳира таркиби ўйинчилари фамилияларидан ташкил топган иккита
рўйхат берилган. К та ўйинчи алмаштирилсин.
21.
1-чи ва 2-чи взвод аскарлари фамилияларидан ташкил топган иккита рўйхат берилган. Хужум
натижасида 1-чи взводдан М та аскар ҳалок бўлди. Иккинчи взвод аскарларидан биринчи взвод
тўлдирилсин.
22.
Маҳсулот номлари ва харидорлар фамилияларидан ташкил топган иккита рўйхат берилган. Ҳар бир N-
чи харидор М-чи маҳсулотни сотиб олади. Ҳарид қилинган маҳсулотлар рўйхатини чиқаринг.
23.
SONY ва SHARP фирмалари томонидан ишлаб чиқилган маҳсулот номларидан ташкил топган иккита
рўйхат берилган. Ўзаро рақобат қилувчи маҳсулотлар рўйхатини тузинг.
Энди ушубу топшириқларга ўхшаш битта мисолни ечиш алгоритма ва дастурини кўриб чиқамиз.
Қуйидагича масала қўйилган бўлсин. Рўйхатнинг максимал элементи топилсин. Ушбу масаланинг дастури ва
натижаси қуйида келтирилган.
21
#include
using namespace std;
class Node
{
public: int number;
Node* next;
};
int main()
{
Node* head = NULL;
Node* lastPtr = NULL;
short action = -1;
while (1)
{ cout<<"1. element qo'shish\n";
cout<<"2. ro'yhatni ko'rish\n";
cout<<"3. ro'yhat maksimalini topish\n";
cout<<"0. chiqish\n\n";
cout<<"tanlang: ";
cin>>action;
if (action == 0)
{
system("CLS");
break;
}
if (action == 1)
{
system("CLS");
Node* ptr = new Node;
int numb = -1;
cout<<"son kiriting: ";
cin>>numb;
ptr->number = numb;
ptr->next = NULL;
if (head == 0)
{
head = ptr;
lastPtr = ptr;
system("CLS");
continue;
}
lastPtr->next = ptr;
lastPtr = ptr;
system("CLS");
continue;
}
if (action == 2)
{
Node* ptr = NULL;
system("CLS");
if (head == 0)
{
cout<<"\t!!! ro'yhat bo'sh !!!\n\n";
system("PAUSE");
system("CLS");
continue;
}
cout<<"* * * * * ro'yhat * * * * *\n\n";
ptr = head;
while (1)
{
cout<
number<<" ";
if (ptr->next == 0)
break;
22
ptr = ptr->next;
}
cout<<"\n\n";
system("PAUSE");
system("CLS");
continue;
}
if (action == 3)
{
system("CLS");
Node* p = head;
Node* q = new Node;
Node* last = new Node;
int max=p->number; q=head;
while(p){
if(max
number){ max=p->number;}
p=p->next;
}
system("CLS");
cout<<"max="<
system("pause");
continue;
}
}}
23
4
Do'stlaringiz bilan baham: |