Sortowanie stogowe i lista jednokieruwnkowa "obiektowo&

0

Mam prosbe czy moglby ktos zamiescic kod sortowania stogowego oraz listy jednokwierunkowej napisanych w C++. Oba te programy muszą byc napisane obiektowo. Z gory dzieki!!!

0

tu masz sortowanie przez kopcowanie (kopiec=stog z tego co wiem):

--------------------------------CUT--------------------------------------

#include <vector>
#include <stdio.h>

using namespace std;

class kopiec {
public:
int size;
kopiec() {
w.push_back(0);
size=0;
}
void build_heap();
void pop();
void push(int);
void print();
void sort();
private:
vector<int> w;
void make_heap(int);
};

void kopiec::print()
{
for (int i=1;i<=w.size()-1;i++)
printf("%i ",w[i]);
}

void kopiec::make_heap(int i)
{
int l;
int r;
int tmp;
int max;
l=2i;
r=(2
i)+1;
if (l<=size && w[l]>w[i])
max=l;
else
max=i;
if (r<=size && w[r]>w[max])
max=r;
if (max!=i) {
tmp=w[i];
w[i]=w[max];
w[max]=tmp;
make_heap(max);
}
}

void kopiec::build_heap()
{
for (int i=size/2;i>=1;i--)
make_heap(i);
}

void kopiec::push(int el)
{
size=size+1;
w.push_back(el);
}

void kopiec::pop()
{
size=size-1;
w.erase(w.end()-1);
}

void kopiec::sort()
{
int tmp;
int n;
n=size;
build_heap();
for (int i=n;i>=2;i--) {
tmp=w[i];
w[i]=w[1];
w[1]=tmp;
size=size-1;
make_heap(1);
}
}

int main()
{
kopiec k;

int n;
int ar;
scanf("%i",&n);
for (int i=0;i<n;i++) {
scanf("%i",&ar);
k.push(ar);
}

k.sort();
k.print();

return 0;
}

--------------------------------CUT--------------------------------------

zaraz napisze ci liste :)

0

tu masz liste jednokierunkową, mam nadzieje ze bez zadnych bledow:

-----------------------------------CUT----------------------------------------------

#include <stdio.h>

using namespace std;

class el {
public:
int key;
el *next;
el(int x) {
key=x;
next=0;
}
};

class list {
public:
list() {
front=0;
back=0;
}
void push_front(int);
void push_back(int);
void pop_front();
void pop_back();
void del(el *prev,el *todel);
void find_and_del(int);
void print();
private:
el *front,*back;
};

void list::find_and_del(int x)
{
el *p;
el *prev;
p=front;
prev=0;
while (p->key!=x && p!=0) {
prev=p;
p=p->next;
}
if (p->key==x)
del(prev,p);
}

void list::del(el *prev,el *todel)
{
if (todel==front)
pop_front();
if (todel==back)
pop_back();
else {
prev->next=todel->next;
delete todel;
}
}

void list::push_front(int x)
{
el *p;
if (front==0 && back==0) {
front=new el(x);
back=front;
}
else {
p=front;
front=new el(x);
front->next=p;
}
}

void list::pop_front()
{
if (front!=0 && back!=0) {
el *tmp;
tmp=front;
if (front->next==0) {
back=0;
front=0;
}
else
front=front->next;
delete tmp;
}
}

void list::push_back(int x)
{
el *p;
if (front==0 && back==0) {
front=new el(x);
back=front;
}
else {
p=back;
back=new el(x);
p->next=back;
}
}

void list::pop_back()
{
if (front!=0 && back!=0) {
el *tmp;
if (front->next!=0) {
tmp=front;
while (tmp->next!=back)
tmp=tmp->next;
back=tmp;
tmp=tmp->next;
back->next=0;
}
else {
tmp=front;
front=0;
back=0;
}
delete tmp;
}
}

void list::print()
{
el *p;
p=front;
while (p!=0) {
printf("%i ",p->key);
p=p->next;
}
}

int main()
{
list lista;
lista.push_back(1);
lista.push_back(2);
lista.push_back(3);
lista.push_back(4);
lista.push_back(5);
lista.pop_front();
lista.find_and_del(5);
lista.push_back(7);
lista.print();

return 0;
}

-----------------------------------CUT----------------------------------------------

0

Ogromne bardzo bardzo wielkie dzięki!!!!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1