STRUKTUR DATA
Modul Praktikum 2
Disusun oleh:
Nim : 2107110665
Start
S - >count =
0
End
1
2. Fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong
Start
End
2
3. Fungsi yang mengecek apakah stack dalam kondisi penuh
Start
End
3
4. Operasi menyisipkan elemen X ke stack T dan mengembalikan stack baru
Start
False
S->count = -
True
End
4
5. Operasi pengembalian elemen puncak stack T, (pop ( T, x))
Start
False
S->count ==0
True
End
5
2. Buatlah flowchart untuk latihan soal nomor 1 dan 2
Flowchart latihan 1 : Main
Start
My stack *st ;
char input [Max];
int i ; st top =-1;;
Masukan kalimat;
No
While input !=
„10‟
Yes
Yes No
Yes
input[i])
pop (*st)
„*‟;
No
i++ printf (“ “)
End
6
Flowchart push latihan 1
Start
My – stack *s ;
char c;
End
7
Flowchart pop latihan 1
Start
My – stack *s
kosong
Printf (“%c” s-
My – stack *s
>kata [stop-];
End
8
Flowchart kosong latihan 1
Start
My – stack *s ;
End
9
Flowchart latihan 2 : Main
Start
Input bilangan
dalam desimal
No
Yes
Konversi kedalam
binner, oktal, heksa
Print ke dalam
binner,oktal, heksa
End
10
Bilangan Biner
Start
0=1; n; input;
I= MAXSTACK n=n/i
No
n>0?
Yes
MAXSTACK=0;
M=n % 2 = push
(m, & tumpukan : 1<0
0++; ?
yes
Printf (pop
End (&tumpukan))
i--;
11
Bilangan Oktal
Start
0=1; n; input;
I= MAXSTACK n=n/i
No
n>0?
Yes
MAXSTACK=0;
M=n % 8 = push
(m, & tumpukan : 1<0
0++; ?
yes
Printf (pop
End (&tumpukan))
i--;
12
Bilanga Heksadesimal
Start
0=1; n; input;
I= MAXSTACK n=n/i
No
n>0?
Yes
MAXSTACK=0;
M=n % 16 = push
(m, & tumpukan : 1<0
0++; ?
yes
Printf (pop
End (&tumpukan))
i--;
13
B. PERCOBAAN
Percobaan 1 : Penerapan fungsi-fungsi tumpukan, memasukan isi tumpukan
dan menampilkan isi tumpukan.
#include <stdio.h>
#define MAXSTACK 5
typedef int ItemType;
/* Definisi struktur stack */
typedef struct
{
int Item[MAXSTACK]; /* Array yang berisi data tumpukan */
int Count; /* menunjukkan indeks data paling atas dari
stack*/
}Stack;
14
}
int Pop(Stack *S)
{
if (S->Count==0)//stack kosong
printf ("Stack masih kosong!");
else
{
--(S->Count);
return (S->Item[S->Count]);
}
}
int main()
{
int i, input;
Stack tumpukan;
InitializeStack(&tumpukan);
for (i=0;i<MAXSTACK;i++)
{
printf ("Masukkan isi stack ke- %d : ",i+1);
scanf("%d",&input);
Push(input,&tumpukan);
}
for (i=MAXSTACK;i>0;i--)
{
printf("Isi stack ke- %d : ",i) ;
printf("%d \n",Pop(&tumpukan));
}
}
15
Percobaan 2 : Program merubah notasi menjadi postfix
16
{
return (S->count == 0);
}
int Full(Stack *S)
{
return (S->count == MAXSTACK);
}
void Push(ItemType x, Stack *S)
{
if (Full(S)) //stack penuh
printf("Stack penuh! Data tidak dapat masuk!");
else
{
++(S->count);
S->item[S->count]=x;
}
}
ItemType Pop(Stack *S)
{
ItemType x;
if (Empty(S)) { //stack kosong
printf("STACK KOSONG!");
return 0;
}
Else
{
x = (S->item[S->count]);
--(S->count);
return x;
}
}
17
void konversi_cetak(char temp[])
{
int i, pjg, valid = 1;
char kar, smtr;
pjg = strlen(temp)-1;
for (i=0;i<pjg;i++)
{
kar = temp[i]; //membaca input per karakter
switch(kar){
//if kar = '(' -> push ke dalam tumpukan
case '(' :
Push(kar, &tumpukan);
break;
//if kar = operand -> langsung ditulis
case '0': case '1': case '2': case '3': case '4': casem'5'
: case '6': case '7': case '8': case'9':
printf("%c", kar);
break;
18
Pop(&tumpukan);
break;
default : //selain dari kar yang diijinkan
valid = 0;
puts("INVALID STSTEMEN");
break;
} //end of switch-case
} //end of looping for
/*Jika statemen valid, akhir notasi infix telah tercapai,
sedangkan tumpukan masih belum kosong, pop semua isi
tumpukan dan tulis hasilnya*/
if((valid != 0) && (!Empty(&tumpukan)))
{
smtr = Pop(&tumpukan);
printf("%c", smtr);
}
}
19
C. PRAKTIKUM
1.TUJUAN PRAKTIKUM
1. Memahami dan mengerti konsep pada stack
2. Memahami dan mengerti operasi-operasi yang ada dalam stack
3. Dapat menggunakan stack untuk memecahkan permasalahan
pemrograman
20
2. DASAR TEORI
Stack adalah sebuah kumpulan data dimana data yang diletakkan di
atas data yang lain. Dengan demikian stack adalah struktur data yang
menggunakan konsep LIFO. Dengan demikian, elemen terakhir yang
disimpan dalam stack menjadi elemen pertama yang diambil. Dalam
proses komputasi, untuk meletakkan sebuah elemen pada bagian atas dari
stack, maka kita melakukan push dan untuk memindahkan dari tempat
yang atas tersebut, kita melakukan pop.
Pada stack ada operasi-operasi dasar yaitu :
1. Operasi menciptakan T sebagai stack kosong
Void InitializeSatack(stack *s)
{
s->Count = 0;
}
21
int Pop(Stack *S, ItemType *x)
{
if (S->Count==0)//stack kosong
else
{
printf("Stack masih kosong!");
--(S->Count);
*x = S->Item[S->Count];
}
}
22
3. PEMBAHASAN
C++ adalah bahasa pemrograman yang biasanya digunakan untuk
mengembangkan aplikasi sistem di komputer, termasuk dalam general
purposes language, maka tergantung dari pemahaman tentang bahasa ini,
hampir semua aplikasi bisa dikembangkan dengannya. Dev C++
digunakan sebagai IDE, aplikasi yang memudahkan kita dalam rangka
membuat program dalam bahasa C++. Pada aplikasi ini, selain digunakan
untuk menuliskan program, terdapat tool lainnya yang cukup lengkap:
untuk melakukan compile, debugging program yang kita kembangkan,
autocomplete fungsi dan fungsi standar lainnya untuk sebuah alat
pemrograman.
char word[100]=
int maxStack, i;
Char word adalah kata-kata yang berisi char dan kata-kata dengan char di
dalamnya. Halaman ini menampilan kembali setaip kata yang
mengandung kata atau huruf yang telah di inputkan.
23
dan siapkan derajad masing-masing operator, misalnya: ^ berderajad 3, *
dan / berderajad 2, + dan – berderajad 1 dan ( berderajad 0.
2. Dimulai dari i = 1 sampai N kerjakan langkah-langkah sebagai berikut:
a. R = S[I]
b. Test nilai R. Jika R adalah:
operand : langsung ditulis
kurung buka : push ke dalam tumpukan
kurung tutup : pop dan tulis semua isi tumpukan sampai ujung
tumpukan = „(„. Pop juga tanda „(„ ini, tetapi tidak
usah ditulis
operator : jika tumpukan kosong atau derajad R lebih tinggi
dibanding derajad ujung tumpukan, push operator
ke dalam tumpukan. Jika tidak, pop ujung tumpukan
dan tulis; kemudian ulang pembandingan R dengan
ujung tumpukan. Kemudian R di-push
c. Jika akhir notasi infix telah tercapai, dan tumpukan masih belum
kosong, pop semua isi tumpukan dan tulis hasilnya.
24
Karakter Hasil Notasi postfix
Karakter dibaca Isi Tumpukan
Tercetak yang terbentuk
F /(*^ F AB+CD-EF
) /( ^ AB+CD-EF^
/ * AB+CD-EF^*
/ AB+CD-EF^*
Dari ilustrasi diatas, bila kita lihat bahwa notasi postfix dari lingkupan:
( A + B ) / (( C – D ) * E ^ F)
adalah
A B + C D – E F ^ */
25
4. HASIL
Latihan 1 : Bagaimana output program dengan input seperti di bawah ini
EAS*Y*QUE***ST***IO*N***
Penjelasan :
Program ini menggunakan stack untuk menampilkan output dari
ketentuan soal yang tertera.
26
Latihan 2 : Buatlah sebuah program yang melakukan konversi dari
bilangan desimal ke bilangan biner, oktal, heksa dengan menggunakan
stack
Penjelasan :
program ini bertujuan, untuk melakukan konversi bilangan desimal ke
bilangan biner, bilangan oktal, bilangan heksadesimal dengan cara
menginput bilangan desimal, lalu pilih konversi ke bilangan yang
diinginkan.
27
Latihan 3 : Buatlah sebuah program yang melakukan pembalikan terhadap
kalimat dengan menggunakan stack
Penjelasan :
Program ini berfungsi untuk membalikan sebuah kalimat dapat
menggunakan stack, selanjutnya input kalimat yang anda ingin balikan.
28
Latihan 4 : Tentukan apakah sebuah kalimat yang diinputkan dalam
program(dengan menggunakan stack) adalah sebuah palindrom atau
bukan. Palindrom adalah kalimat yang jika dibaca dari depan dan dari
belakang, maka bunyinya sama.
Penjelasan :
Program ini berfungsi untuk mendeteksi sebuah kalimat yang di input
merupakan sebuah polindrome atau tidak polindrome dengan
menggunakan stack.
29
Latihan 5 : Tambahkan implementasi Percobaan 2 untuk mengecek apakah
notasi infix yangdi input kan benar atau tidak.
Penjelasan :
Program ini berfungsi untuk mengecek notasi yang diinput oleh user,
ketika notasi yang di-input terdapat kekurangan kurung operand dan
operator maka output akan menampilkan pesan.
30
Latihan 6 : Tambahkan implementasi Percobaan 2 hingga mendapatkan
hasil penghitungannya.
Penjelasan :
Program ini berfungsi untuk menampilkan hasil perhitungan nilai infix
yang di input oleh user.
31
5. KESIMPULAN
Stack adalah tipe data abstrak yang umum digunakan pada seluruh
pemrograman komputer. Stack sendiri sama seperti halnya tumpukan jika
di dunia nyata, misalnya tumpukan piring yang telah selesai dicuci, akan
ditumpuk dari bawah ke atas, kemudian setelah semua bersih maka
diambil satu persatu dari atas ke bawah di masukkan ke lemari atau rak
piring. Untuk mengimplementasikan program stack di C++ kita
membutuhkan tiga method atau fungsi push(); untuk menambahkan data
ke tumpukan, pop (); untuk me ngeluarkan data dari tumpukan dan
printStack() untuk menampilkan data yang ada di tumpukan.
32
6. LISTING PROGRAM
Latihan 1 : Bagaimana output program dengan input seperti di bawah ini
EAS*Y*QUE***ST***IO*N***
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct
{
char kata[35];
int top;
}My_Stack;
int main()
{
My_Stack st;
char input[50];
int i = 0;
st.top = -1;
printf("Masukkan Kalimat : ");
gets(input);
printf("Hasil : ");
while(input[i] != '\0')
{
if(isalpha(input[i]))
push(&st, input[i]);
else if(input[i] == '*')
pop(& st);
else
{
printf("");
}
i++;
}
}
void push(My_Stack* s, char c)
{
s->top++;
s->kata[s->top] = c;
}
33
void pop(My_Stack* s)
{
if(kosong(s))
{
printf("ERROR!");
}
printf("%c", s->kata[s->top--]);
}
int kosong(My_Stack* s)
{
return(s->top < 0? 1:0);
}
34
Latihan : Buatlah sebuah program yang melakukan konversi dari bilangan
desimal ke bilangan biner, oktal, heksa dengan menggunakan stack
#include <stdio.h>
#include <string.h>
int MAXSTACK;
typedef int itemtype;
typedef struct
{
itemtype item[300];
int count;
}stack;
void initializestack(stack *s)
{
s->count = 0;
}
35
}
return 0;
}
//deklarasi
int i, n, m, o,p,pilih;
int input;
stack tumpukan;
void biner();
void oktal();
void heksa();
main()
{
printf("-------konversi desimal ke biner oktal dan
heksadesimal------\n");
initializestack(&tumpukan);
printf("\nmasukkan bilangan desimal = ");
scanf("%d", &input);
printf("\n---MENU---\n");
printf("1 untuk konversi ke biner\n");
printf("2 untuk konversi ke oktal\n");
printf("3 untuk konversi ke heksa\n");
printf("4 untuk keluar");
while(pilih<4)
{
printf("\n\npilih : ");
scanf("%d",&pilih);
switch(pilih)
{
case 1:
printf("bilangan binernya\n");
biner();break;
case 2:
printf("bilangan oktalnya\n");
oktal();break;
case 3:
printf("bilangan heksadesimalnya\n");
heksa();break;
case 4:
printf("--silahkan tekan enter sekalilagi");
}
}
return 0;
}
//ke oktal
void oktal(){
for(o=1,n=input;n>0;n=n/8,o++
36
{
MAXSTACK=o;
m=n%8;
push(m,&tumpukan);
}
for(i=MAXSTACK;i>0;i--)
{
printf("%d", pop(&tumpukan));
}
}
//ke biner
void biner(){
for(o=1,n=input;n>0;n=n/2,o++)
{
MAXSTACK=o;
m=n%2;
push(m,&tumpukan);
}
for(i=MAXSTACK;i>0;i--)
{
printf("%d", pop(&tumpukan));
}
}
//ke heksa desimal
void heksa(){
for(o=1,n=input;n>0;n=n/16,o++)
{
MAXSTACK=o;
m=n%16;
push(m,&tumpukan);
}
for(i=MAXSTACK;i>0;i--)
{
p=pop(&tumpukan);
if(p<=9)
printf("%d",p);
else if(p==10)printf("A");
else if(p==11)printf("B");
else if(p==12)printf("C");
else if(p==13)printf("D");
else if(p==14)printf("E");
else if(p==15)printf("F");
}
}
37
Latihan 3 : Buatlah sebuah program yang melakukan pembalikan terhadap
kalimat dengan menggunakan stack
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
using namespace std;
struct Tumpukan
{
char isi[25];
int atas;
}T;
T.atas=T.atas+1;
T.isi[T.atas]=x;
}
}
char pop(){
char hasil;
if(T.atas == 0){
cout<<"Tumpukan sudah kosong";
hasil = ' ';
}
else{
hasil = T.isi[T.atas];
T.atas = T.atas - 1;
}
return hasil;
}
int main()
{
int i;
char kalimat[25];
system("CLS");
T.atas=0;
cout<<"masukan kalimat :
";cin.getline(kalimat,sizeof(kalimat));
system("CLS");
cout<<"kalimat asli : "<<kalimat;
38
for(i=0; i<strlen(kalimat); i++)
{
push(kalimat[i]);
}
cout<<"\nKalimat Setelah di balik : ";
return 0;
}
39
Latihan 4 : Tentukan apakah sebuah kalimat yang diinputkan dalam
program Dengan menggunakan stack) adalah sebuah palindrom atau
bukan. Palindrom adalah kalimat yang jika dibaca dari depan dan dari
belakang, maka bunyinya sama.
#include <iostream>
#include <string>
using namespace std;
class tumpukan{
public:
tumpukan(){
//buat link list kosong
head=NULL;
tail=NULL;
size=0;
}
//menambahkan data pada stack/membuat node baru
void push(char a){
//buat node baru
node* tmp = new node;
//masukkan data ke node
tmp->data = a;
//tentukan node setelahnya
tmp->next = NULL;
//jika LL kosong
if(size==0){
//head dan tail adalah node yg baru dibuat
head = tmp;
tail = tmp;
//node sebelumnya belum ada
tail->prev = NULL;
}
//jika LL tidak kosong
else{
//node setelah tail adalah node baru
tail->next = tmp;
//node sebelum node baru adalah tail
tmp->prev = tail;
//pindahkan tail ke node baru
tail = tmp;
}
//jumlah node bertambah
size++;
}
//mengambil data dan menghapus node yang terakhir
char pop(){
40
//ambil data di tail
data = tail->data;
if(head==tail){
delete head;
}
else{
//akses tail
node* tmp = tail;
//pindah tail
tail = tail->prev;
//hapus link
tail->next = NULL;
tmp->prev = NULL;
//hapus mantan tail (tmp)
delete tmp;
}
size--;
return data;
}
private:
struct node{
char data;
node* next;
node* prev;
};
node* head;
node* tail;
int size;
char data;
};
class antrian{
public:
antrian(){
//buat link list kosong
head=NULL;
tail=NULL;
size=0;
}
//menambahkan data pada stack/membuat node baru
void push(char a){
//buat node baru
node* tmp = new node;
//masukkan data ke node
tmp->data = a;
41
//tentukan node setelahnya
tmp->next = NULL;
//jika LL kosong
if(size==0){
//head dan head adalah node yg baru dibuat
head = tmp;
tail = tmp;
//node selanjutnya belum ada
head->prev = NULL;
}
//jika LL tidak kosong
else{
//node setelah head adalah node baru
tail->next = tmp;
//node sebelum node baru adalah head
tmp->prev = tail;
//pindahkan head ke node baru
tail = tmp;
}
//jumlah node bertambah
size++;
}
//mengambil data dan menghapus node yang pertama
char pop(){
//ambil data di head
data = head->data;
if(head==tail){
delete head;
}
else{
//akses head
node* tmp = head;
//pindah head
head = head->next;
//hapus link
head->prev = NULL;
tmp->next = NULL;
//hapus mantan head (tmp)
delete tmp;
}
size--;
return data;
}
private:
struct node{
char data;
42
node* next;
node* prev;
};
node* head;
node* tail;
int size;
char data;
};
int main() {
//membuat stack
tumpukan s;
//membuat queue
antrian q;
//membuat variabel bool palindrome
bool palindrome = true;
cout<<" -- Pengecekan Palindrom --"<<endl<<endl;
//membuat variabel penampungan kata
string kata;
//meminta user memasukkan kata
char a,b,c;
do{
cout<<"Masukkan kata : ";cin>>kata;cout<<endl;
//loop untuk memasukkan semua isi dari string kata ke
stack dan queue
for(int i=0;i<kata.length();i++){
s.push(kata[i]);
q.push(kata[i]);
}
//loop untuk membandingkan hasil popping dari stack dan
queue
for(int l = 0;l<kata.length();l++){
//jika keluaran popping berbeda
a = q.pop(); b = s.pop();
if(a != b)
{
cout<<a<<" != "<<b<<endl;
palindrome = false;
}
else{
cout<<a<<" == "<<b<<endl;
}
}
//jika semua hasil perbandingan popping stack dan queue
sama
if(palindrome == true){
cout<<"Kata tersebut adalah kata palindrome";
43
}
else{
cout<<"Kata tersebut tidak palindrome";
}
cout<<"\n\nIngin mengecek kata lainnya? (Y/N)";
cin>>c;cout<<endl;
}while(c == 'Y' || c == 'y');
cout<<endl;
system("pause");
return 0;
}
44
Latihan 5 : Tambahkan implementasi Percobaan 2 untuk mengecek apakah
notasi infix yangdi input kan benar atau tidak.
#include <stdio.h>
#include <string.h>
#define MAXSTACK 100
Stack tumpukan ;
void InitializeStack(Stack *);
int Empty(Stack *);
int Full(Stack *);
void Push(ItemType, Stack *);
ItemType Pop(Stack *);
int drjt(char);
void konversi_cetak(char []);
main()
{
char tampung[MAXSTACK], jawab;
puts("Cek Notasi Infiks Benar atau Salah");
puts("Dengan Memanfaatkan Struktur Stack");
do {
InitializeStack(&tumpukan);
fflush(stdin);
puts("");
printf("Masukan ekspresi dalam notasi infix : ");
fgets(tampung, sizeof(tampung), stdin);
printf("Cek Output = ");
konversi_cetak(tampung);
puts("");
fflush(stdin);
printf("\nMau mencoba lagi (y/t) ? ");
scanf("%c", &jawab);
} while((jawab == 'y') || (jawab == 'Y'));
}
void InitializeStack(Stack *S)
{
S->count = 0;
}
int Empty(Stack *S)
{
45
return (S->count == 0);
}
int Full(Stack *S)
{
return (S->count == MAXSTACK);
}
void Push(ItemType x, Stack *S)
{
if (Full(S)) //stack penuh
printf("Stack penuh! Data tidak dapat masuk!");
else {
++(S->count);
S->item[S->count]=x;
}
}
ItemType Pop(Stack *S)
{
ItemType x;
if (Empty(S)) { //stack kosong
printf("STACK KOSONG!");
return 0;
}
else{
x = (S->item[S->count]);
--(S->count);
return x;
}
}
void konversi_cetak(char temp[])
{
int i,h=0, j=0, l=0, m=0, pjg, valid = 1;
char kar;
// smtr;
pjg = strlen(temp)-1;
for (i=0;i<pjg;i++)
{
kar = temp[i];
switch(kar){
case '(' :
h++;
break;
case '0': case '1': case '2': case '3': case '4': case
'5' : case '6': case '7': case '8': case'9':
j++;
46
break;
case '+': case '-': case'*': case '/': case '^' :
l++;
break;
case ')' :
m++;
break;
default :
valid = 0;
puts("INVALID STSTEMEN");
break;
}
}
if(h!=m){
printf("\nNotasi infix salah, kurung tidak lengkap");
}
else if(j==l){
printf("\nNotasi infix salah, operand tidak lengkap");
}
else if(j-2>=l){
printf("\nNotasi infix salah, operator tidak lengkap");
}else{
printf("\nTidak Ada Kesalahan");
}
}
47
Latihan 6 : Tambahkan implementasi Percobaan 2 hingga mendapatkan
hasil penghitungannya.
#include <iostream>
#include <ctype.h>
#include <stack>
using namespace std;
string getPostfix( string str );
double evaluate( string str );
bool hasPrecedence( char a, char b );
int main()
{
cout << " PROGRAM KALKULATOR "
<< endl;
cout << "...................."
<< endl;
string infixString;
string postFixString;
bool valid = false;
// konversi ke infix
postFixString = getPostfix( infixString );
cout << "Nilai Postfix :" << postFixString << endl <<
endl;
// konversi string
string postFixStr;
// stack for operators
stack<char> stack;
for ( int i = 0; i < str.length(); i++ )
{
if ( isdigit( str[i] ) )
postFixStr += str[i];
else if ( str[i] == '(' )
stack.push( str[i] );
48
else if ( str[i] == '+' || str[i] == '-' || str[i] ==
'*' || str[i] == '/' )
{
if ( stack.empty() || stack.top() == '(' )
{
stack.push( str[i] );
}
else if ( hasPrecedence( str[i], stack.top() ) )
{
stack.push( str[i] );
}
else
{
postFixStr += stack.top();
stack.pop();
stack.push( str[i] );
}
}
else if ( str[i] == ')' )
{
while ( stack.top() != '(' )
{
postFixStr += stack.top();
stack.pop();
}
if ( stack.top() == '(' )
stack.pop();
}
}
while ( ! stack.empty() )
{
postFixStr += stack.top();
stack.pop();
}
return postFixStr;
}
double evaluate( string str )
{
int op1, op2;
stack<int> stack;
for ( int i = 0; i < str.length(); i++ )
{
if ( isdigit( str[i] ) )
stack.push( str[i] - 48 );
else if ( str[i] == '+' )
{
49
op1 = stack.top();
stack.pop();
op2 = stack.top();
stack.pop();
stack.push( op1 + op2 );
}
else if ( str[i] == '-' )
{
op1 = stack.top();
stack.pop();
op2 = stack.top();
stack.pop();
stack.push( op1 - op2 );
}
else if ( str[i] == '*' )
{
op1 = stack.top();
stack.pop();
op2 = stack.top();
stack.pop();
stack.push( op1 * op2 );
}
else if ( str[i] == '-' )
{
op1 = stack.top();
stack.pop();
op2 = stack.top();
stack.pop();
stack.push( op1 / op2 );
}
}
return stack.top();
}
bool hasPrecedence( char a, char b )
{
int aWeight, bWeight = 2;
if ( a == '*' || a == '/' )
aWeight = 2;
else
aWeight = 1;
return aWeight >= bWeight;
}
50