|
A programozási feladatok egyik legfontosabb eleme az, hogy helyesen válasszuk meg a megoldáshoz szükséges adatszerkezeteket. Egy jó adatkezelés könnyű megoldáshoz vezethet. Ebben a fejezetben csak az összetett adatszerkezeteket elemezzük, nem tudományos igénnyel, csak praktikusan.
A klasszikus tömb a C/C++ nyelvben (és más rokon nyelvekben is) egy jól használható adatszerkezet. Korábban ezt a típust preferáltuk, de mostanában inkább a vector típust használjuk, mivel számos "szolgáltatás" tartozik hozzá.
Akár tömbről, akár vectorról beszélünk, illetve a Pythonban a list típusról, az indexelés művelete jelenti itt a "kulcsot" az adat kezelésében. Indexek segítségével érhetjük el az egyedi elemeket, járhatjuk be a teljes adatszerkezetet.
Koncentráljunk a két nyelv hasonlóságaira adatkezelés szempontjából, próbáljuk nyelvfüggetlenül értelmezni a konkrétumokat...
|
|
C++ kódrészlet...:
// klasszikus tömb
int t[100];
char k[50];
// inicializálás: 10 elemű tömb, kezdőérték 0 minden elemnek
int t[10]={0};
for(auto elem:t)
{
cout << elem << endl;
}
cout << "Elemek száma: ";
cout << sizeof(t)/sizeof(int) << endl;
// vector
#include <vector>
...
vector<int> v;
vector<string> s;
vector<float> f;
...
// új elem a vector végére
v.push_back(10);
/* vector inicializálása: elemszám (n) és kezdőérték (k) minden elemre */
vector<int> v(n, k);
Példák tömb használatára (C++):
|
Python kódrészlet...:
lista=[] # üres lista
lista=dict() # üres lista így...
# egy listának bármi lehet az eleme
li1=[13,'szöveg','K',['A',11,'példa'],5.3,True]
# lista inicializálása (☂ Lista anomália!)
li2=[0]*n
# új elem hozzáadása a listához
lista.append(10)
lista.append('ablak')
# lista elemei [10,'ablak']
Példák lista használatára (Python):
|
Rendezés - tömb, vector
C++ kódrészlet...:
#include <iostream> // cin, cout
#include <algorithm> // sort
#include <ctime> // time
#include <vector> // vector
#define N 100
using namespace std;
int main()
{
setlocale(LC_ALL,"");
int t[N];
int x;
vector<int> v;
v.reserve(N);
srand(time(NULL));
for(int i=0;i<N;i++)
{
x=rand()%100+1;
t[i]=x;
v.push_back(x);
}
// rendezés növekvő sorrendbe
sort(&t[0],&t[100]);
sort(v.begin(),v.end());
cout << "Rendezett tömb:" << endl;
for(auto szam:t)
{
cout << szam << " ";
}
cout << endl;
cout << "Rendezett vector:" << endl;
for(auto szam:v)
{
cout << szam << " ";
}
cout << endl;
// rendezés csökkenõ sorrendbe C++-os "lambda" kifejezéssel
sort(&t[0],&t[100],[](int a, int b) {return a > b;});
//sort(v.begin(),v.end(),[](int a, int b) {return a > b;});
sort(v.rbegin(),v.rend());
cout << "Rendezett tömb:" << endl;
for(auto szam:t)
{
cout << szam << " ";
}
cout << endl;
cout << "Rendezett vector:" << endl;
for(auto szam:v)
{
cout << szam << " ";
}
cout << endl;
return 0;
}
|
Rendezés - lista
Python kódrészlet...:
from random import randint as rand
li1=[13,'szöveg','K',['A',11,'példa'],5.3,True]
# "vegyes" típusú listák nem rendezhetők...
# print(sorted(li1))
# hibaüzenet lényege:
# '<' not supported between instances of 'str' and 'int'
li2=list() # üres lista
for i in range(7):
li2.append(rand(-5,5))
# Például --> li2=[4,2,5,1,-2,-4,3]
# magának a listának a rendezése
li2.sort()
print(li2) # li2: [-4, -2, 1, 2, 3, 4, 5]
li2.sort(reverse=True)
print(li2) # li2: [5, 4, 3, 2, 1, -2, -4]
# ----------------------------------------------------
# új rendezett lista
rend=sorted(li2)
print(rend) # rend: [-4, -2, 1, 2, 3, 4, 5]
rend=sorted(li2,reverse=True)
print(rend) # rend: [5, 4, 3, 2, 1, -2, -4]

|