Bab. 11 Struktur Data Terapan
11.1 Menjumlahkan Elemen-Elemen Array
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/* Penjumlahan elemen-elemen array */
#include<stdio.h>
#include<conio.h>
void main()
{
void
baca(int *,int);
void
dis(int *,int);
int
a[5],i,jum=0;
printf("Masukkan elemen-elemen ke dalam daftar \n");
baca(a,5); /*baca the
list*/
printf("Elemen-elemen di dalam daftar adalah \n");
dis(a,5);
for(i=0;i<5;i++)
{
jum+=a[i];
}
printf("Jumlah elemen-elemen di dalam daftar adalah
%d\n",jum);
getch();
}
void baca(int c[],int i)
{
int
j;
for(j=0;j<i;j++)
scanf("%d",&c[j]);
fflush(stdin);
}
void dis(int d[],int i)
{
int
j;
for(j=0;j<i;j++)
printf("%d ",d[j]);
printf("\n");
}
|
Masukkan elemen-elemen ke dalam daftar
34
54
76
78
65
Elemen-elemen di dalam daftar adalah
34 54 76 78 65
Jumlah elemen-elemen di dalam daftar
adalah 307
11.2 Menjumlahkan Dua Array
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
/* Penjumlahan dua array */
#include<stdio.h>
#include<conio.h>
void main()
{
void
baca(int *,int);
void
dis(int *,int);
void
tambah(int *,int *,int * ,int);
int
a[5],b[5],c[5],i;
printf("Masukkan elemen-elemen ke daftar pertama
\n");
baca(a,5); /*membaca
daftar pertama*/
printf("Elemen-elemen array pertama adalah \n");
dis(a,5); /*Menampilkan array
pertama*/
printf("Masukkan elemen-elemen ke daftar kedua \n");
baca(b,5); /*membaca array
kedua*/
printf("Elemen-elemen array kedua adalah \n");
dis(b,5); /*Menampilkan array
kedua*/
tambah(a,b,c,i);
printf("Array hasil perjumlahan adalah \n");
dis(c,5);
getch();
}
void tambah(int a[],int b[],int
c[],int i)
{
for(i=0;i<5;i++){
c[i]=a[i]+b[i];
}
}
void baca(int c[],int i)
{
int
j;
for(j=0;j<i;j++)
scanf("%d",&c[j]);
fflush(stdin);
}
void dis(int d[],int i)
{
int
j;
for(j=0;j<i;j++)
printf("%d ",d[j]);
printf("\n");
}
|
Masukkan elemen-elemen ke daftar
pertama
32
34
45
65
54
Elemen-elemen array pertama adalah
32 34 45 65 54
Masukkan elemen-elemen ke daftar kedua
65
43
66
76
87
Elemen-elemen array kedua adalah
65 43 66 76 87
Array hasil perjumlahan adalah
97 77 111 141 141
11.3 Membalikkan Isi Array
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
/* Membalikkan isi array */
#include<stdio.h>
#include<conio.h>
void main()
{
void
baca(int *,int);
void
dis(int *,int);
void
balik(int *,int *,int);
int
a[5],b[5];
baca(a,5);
dis(a,5);
balik(a,b,5);
dis(b,5);
getch();
}
void baca(int c[],int i)
{
int
j;
printf("Masukkan array \n");
for(j=0;j<i;j++)
scanf("%d",&c[j]);
fflush(stdin);
}
void dis(int d[],int i)
{
int
j;
printf("Array adalah \n");
for(j=0;j<i;j++)
printf("%d ",d[j]);
printf("\n");
}
void balik(int a[],int balik_b[],int
j)
{
int
i,k;
k=j-1;
for(i=0;i<j;i++){
balik_b[i]=a[k];
k--;
}
}
|
Masukkan array
23
32
33
45
45
Array adalah
23 32 33 45 45
Array adalah
45 45 33 32 23
11.4 Mengurutkan dan Menggabungkan Dua
Array
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/* Menggabungkan dan mengurutkan dua array
*/
#include<stdio.h>
#include<conio.h>
void main()
{
void
baca(int *,int);
void
dis(int *,int);
void
urut(int *,int);
void
gabung(int *,int *,int *,int);
int
a[5],b[5],c[10];
printf("Masukkan array pertama \n");
baca(a,5); /*membaca
array*/
printf("Elemen-elemen array pertama adalah \n");
dis(a,5); /*menampilkan array
pertama*/
printf("Masukkan array kedua \n");
baca(b,5); /*read the list*/
printf("Elemen-elemen array kedua adalah \n");
dis(b,5); /*menampilkan array
kedua*/
urut(a,5);
printf("array a terurut adalah:\n");
dis(a,5);
urut(b,5);
printf("array b terurut adalah:\n");
dis(b,5);
gabung(a,b,c,5);
printf("Elemen-elemen dari array yang digabung adalah
\n");
dis(c,10); /*menampilkan array
yang sudah digabung*/
getch();
}
void baca(int c[],int i)
{
int
j;
for(j=0;j<i;j++)
scanf("%d",&c[j]);
fflush(stdin);
}
void dis(int d[],int i)
{
int
j;
for(j=0;j<i;j++)
printf("%d ",d[j]);
printf("\n");
}
void urut(int arr[] ,int k)
{
int
temp;
int
i,j;
for(i=0;i<k;i++){
for(j=0;j<k-i-1;j++){
if(arr[j]<arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
void gabung(int a[],int b[],int
c[],int k)
{
int
ptra=0,ptrb=0,ptrc=0;
while(ptra<k
&& ptrb<k)
{
if(a[ptra]
< b[ptrb])
{
c[ptrc]=a[ptra];
ptra++;
}
else
{
c[ptrc]=b[ptrb];
ptrb++;
}
ptrc++;
}
while(ptra<k)
{
c[ptrc]=a[ptra];
ptra++;ptrc++;
}
while(ptrb<k)
{
c[ptrc]=b[ptrb];
ptrb++; ptrc++;
}
}
|
Masukkan array pertama
23
43
32
22
43
Elemen-elemen array pertama adalah
23 43 32 22 43
Masukkan array kedua
45
65
54
75
76
Elemen-elemen array kedua adalah
45 65 54 75 76
array a terurut adalah:
43 43 32 23 22
array b terurut adalah:
76 75 65 54 45
ELemen-elemen dari array yang digabung
adalah
43 43 32 23 22 76 75 65 54 45
11.5 Transposisi Matriks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/* Transposisi Matriks */
#include<stdio.h>
#include<conio.h>
#define BARIS 3
#define KOLOM 3
void main()
{
void
baca(int a[][KOLOM],int,int);
void
dis(int a[][KOLOM],int,int);
void
trans(int a[][KOLOM],int,int);
int
a[3][3];
baca(a,BARIS,KOLOM);
printf("\nMatriks adalah \n");
dis(a,BARIS,KOLOM);
trans(a,BARIS,KOLOM);
printf("Transposisi atas matriks adalah\n");
dis(a,BARIS,KOLOM);
getch();
}
void baca(int c[3][3] ,int i ,int
k)
{
int
j,l;
printf("Masukkan array \n");
for(j=0;j<i;j++)
for(l=0;l<k;l++)
scanf("%d",&c[j][l]);
fflush(stdin);
}
void dis(int d[3][3 ],int i,int
k)
{
int
j,l;
for(j=0;j<i;j++)
{
for(l=0;l<k;l++)
printf("%d ",d[j][l]);
printf("\n");
}
}
void trans(int mat[][3],int k ,int
l)
{
int
i,j,temp;
for(i=0;i<k;i++)
{
for(j=i+1;j<l;j++)
{
temp=mat[i][j];
mat[i][j]=mat[j][i];
mat[j][i]=temp;
}
}
}
|
Masukkan array
32
44
54
54
65
75
76
78
76
Matriks adalah
32 44 54
54 65 75
76 78 76
Transposisi atas matriks adalah
32 54 76
44 65 78
54 75 76
11.6 Pengurutan Quick
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/* Pengurutan Quick */
#include <stdio.h>
#define MAKS 10
void tukar(int *x,int *y)
{
int
temp;
temp = *x;
*x
= *y;
*y
= temp;
}
int posisiKunci(int i,int j )
{
return((i+j) /2);
}
void pengurutanQuick(int daftar[],int m,int
n)
{
int
kunci,i,j,k;
if(
m < n)
{
k = posisiKunci(m,n);
tukar(&daftar[m],&daftar[k]);
kunci = daftar[m];
i = m+1;
j = n;
while(i
<= j)
{
while((i <= n) && (daftar[i] <= kunci))
i++;
while((j >= m) && (daftar[j] > kunci))
j--;
if( i < j)
tukar(&daftar[i],&daftar[j]);
}
tukar(&daftar[m],&daftar[j]);
pengurutanQuick(daftar,m,j-1);
pengurutanQuick(daftar,j+1,n);
}
}
void bacadaftar(int daftar[],int n)
{
int
i;
printf("Masukkan elemen-elemen\n");
for(i=0;i<n;i++)
scanf("%d",&daftar[i]);
}
void tampilDaftar(int daftar[],int n)
{
int
i;
printf("Elemen-elemen di dalam daftar adalah: \n");
for(i=0;i<n;i++)
printf("%d\t",daftar[i]);
}
void main()
{
int
daftar[MAKS], n;
printf("Masukkan jumlah elemen di dalam daftar maks = 10\n");
scanf("%d",&n);
bacadaftar(daftar,n);
printf("Daftar sebelum pengurutan adalah:\n");
tampilDaftar(daftar,n);
pengurutanQuick(daftar,0,n-1);
printf("\nDaftar setelah pengurutan adalah:\n");
tampilDaftar(daftar,n);
}
|
Masukkan jumlah elemen di dalam daftar
maks = 10
6
Masukkan elemen-elemen
32
34
45
65
55
77
Daftar sebelum pengurutan adalah:
Elemen-elemen di dalam daftar adalah:
32
34 45 65
55 77
Daftar setelah pengurutan adalah:
Elemen-elemen di dalam daftar adalah:
32
34 45 55
65 77
11.7 Pengurutan Heap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/* Pengurutan Heap */
#include <stdio.h>
#define MAKS 10
void tukar(int *x,int *y)
{
int
temp;
temp = *x;
*x
= *y;
*y
= temp;
}
void ubah( int list[],int i, int
n)
{
int
j,k,flag;
k =
list[i];
flag = 1;
j =
2 * i;
while(j
<= n && flag)
{
if(j
< n && list[j] < list[j+1])
j++;
if(
k >= list[j])
flag =0;
else
{
list[j/2] = list[j];
j = j *2;
}
}
list [j/2] = k;
}
void bangun_heap_awal( int list[], int
n)
{
int
i;
for(i=(n/2);i>=0;i--)
ubah(list,i,n-1);
}
void pengurutanHeap(int list[],int n)
{
int
i;
bangun_heap_awal(list,n);
for(i=(n-2);
i>=0;i--)
{
tukar(&list[0],&list[i+1]);
ubah(list,0,i);
}
}
void bacaList(int list[],int n)
{
int
i;
printf("Masukkan elemen-elemen:\n");
for(i=0;i<n;i++)
scanf("%d",&list[i]);
}
void tampilList(int list[],int n)
{
int
i;
printf("Elemen-elemen adalah: \n");
for(i=0;i<n;i++)
printf("%d\t",list[i]);
}
void main()
{
int
list[MAKS], n;
printf("Masukkan jumlah elemen di dalam list, maks = 10\n");
scanf("%d",&n);
bacaList(list,n);
printf("List sebelum pengurutan adalah:\n");
tampilList(list,n);
pengurutanHeap(list,n);
printf("List setelah pengurutan adalah:\n");
tampilList(list,n);
}
|
Masukkan jumlah elemen di dalam list,
maks = 10
6
Masukkan elemen-elemen:
43
33
55
66
77
88
List sebelum pengurutan adalah:
Elemen-elemen adalah:
43
33 55 66
77 88
List setelah pengurutan adalah:
Elemen-elemen adalah:
33
43 55 66
77 88
11.8 Pencarian Biner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/* Pencarian Biner */
#include <stdio.h>
#define MAKS 10
void pencarianBiner(int list[],int n,int
elemen)
{
int
l,u,m, flag = 0;
l =
0;
u =
n-1;
while(l <= u)
{
m = (l+u)/2;
if(
list[m] == elemen)
{
printf(" Elemen dengan nilai %d ada pada
posisi %d \n", elemen,m);
flag =1;
break;
}
else
if(list[m] < elemen)
l = m+1;
else
u = m-1;
}
if(
flag == 0)
printf("Elemen dengan nilai %d
tidak ada\n", elemen);
}
void bacaList(int list[],int n)
{
int
i;
printf("Masukkan elemen-elemen\n");
for(i=0;i<n;i++)
scanf("%d",&list[i]);
}
void tampilList(int list[],int n)
{
int i;
printf("Elemen-elemen di dalam list adalah: \n");
for(i=0;i<n;i++)
printf("%d\t",list[i]);
}
void main()
{
int
list[MAKS], n, elemen;
printf("Jumlah elemen di dalam list, maks = 10\n");
scanf("%d",&n);
bacaList(list,n);
printf("\nList sebelum pengurutan adalah:\n");
tampilList(list,n);
printf("\nMasukkan elemen yang akan dicari\n");
scanf("%d",&elemen);
pencarianBiner(list,n,elemen);
}
|
Jumlah elemen di dalam list, maks = 10
8
Masukkan elemen-elemen
45
44
7
87
76
98
90
43
List sebelum pengurutan adalah:
Elemen-elemen di dalam list adalah:
45
44 7 87
76 98 90
43
Masukkan elemen yang akan dicari
98
Elemen dengan nilai 98 ada pada posisi
5
11.9 Tumpukan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/* Program untuk tumpukan */
#include <stdio.h>
#define MAKS 10 /* The maximum size of the tumpukan
*/
#include <stdlib.h>
void tempatkanpadaTumpukan(int tumpukan[], int
*atas, int nilai)
{
if(*atas
< MAKS ) {
*atas = *atas + 1;
tumpukan[*atas] = nilai;
}
else
{
printf("Tumpukan penuh, tidak bisa menempatkan nilai pada
tumpukan\n");
exit(0);
}
}
void ambilDariTumpukan(int tumpukan[], int
*atas, int * nilai)
{
if(*atas
>= 0 ) {
*nilai = tumpukan[*atas];
*atas = *atas - 1;
}
else
{
printf("Tumpukan kosong, tidak bisa mengambil nilai dari
tumpukan\n");
exit(0);
}
}
void main()
{
int
tumpukan[MAKS];
int
atas = -1;
int
n,nilai;
do
{
do
{
printf("Masukkan elemen pada tumpukan:\n");
scanf("%d",&nilai);
tempatkanpadaTumpukan(tumpukan,&atas,nilai);
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
} while(n == 1);
printf("Masukkan 1 untuk mengambil elemen dari tumpukan\n");
scanf("%d",&n);
while( n == 1)
{
ambilDariTumpukan(tumpukan,&atas,&nilai);
printf("Nilai yang diambil dari tumpukan adalah
%d\n",nilai);
printf("Masukkan 1 untuk mengambil elemen dari tumpukan\n");
scanf("%d",&n);
}
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
} while(n
== 1);
}
|
Masukkan elemen pada tumpukan:
10
Masukkan 1 untuk lanjut
1
Masukkan elemen pada tumpukan:
20
Masukkan 1 untuk lanjut
1
Masukkan elemen pada tumpukan:
30
Masukkan 1 untuk lanjut
0
Masukkan 1 untuk mengambil elemen dari
tumpukan
1
Nilai yang diambil dari tumpukan
adalah 30
Masukkan 1 untuk mengambil elemen dari
tumpukan
1
Nilai yang diambil dari tumpukan
adalah 20
Masukkan 1 untuk mengambil elemen dari
tumpukan
1
Nilai yang diambil dari tumpukan
adalah 10
Masukkan 1 untuk mengambil elemen dari
tumpukan
11.10 Tumpukan Dengan Senarai Berantai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
/* Tumpukan dengan senarai berantai */
#include <stdio.h>
#include <stdlib.h>
struct simpul
{
int
data;
struct
simpul *link;
};
struct simpul *tempatkanPadaTumpukan(struct simpul *p, int
nilai)
{
struct simpul *temp;
temp=(struct simpul *)malloc(sizeof(struct simpul));
/* menciptakan simpul baru menggunakan
nilai yang dilewatkan sebagai parameter */
if(temp==NULL)
{
printf("Memori tidak tersedia\n");
exit(0);
}
temp->data = nilai;
temp->link = p;
p =
temp;
return(p);
}
struct simpul *ambilDariTumpukan(struct
simpul *p, int *nilai)
{
struct simpul *temp;
if(p==NULL)
{
printf(" Tumpukan kosong, tidak bisa diambil\n");
exit(0);
}
*nilai = p->data;
temp = p;
p =
p->link;
free(temp);
return(p);
}
void main()
{
struct simpul *top = NULL;
int
n,nilai;
do
{
do
{
printf("Masukkan elemen yang akan ditempatkan pada tumpukan:\n");
scanf("%d",&nilai);
top = tempatkanPadaTumpukan(top,nilai);
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
} while(n == 1);
printf("Masukkan 1 untuk mengambil elemen dari tumpukan\n");
scanf("%d",&n);
while( n == 1)
{
top = ambilDariTumpukan(top,&nilai);
printf("Nilai yang diambil dari tumpukan adalah
%d\n",nilai);
printf("Masukkan 1 untuk mengambil elemen dari tumpukan\n");
scanf("%d",&n);
}
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
}
while(n == 1);
}
|
Masukkan elemen yang akan ditempatkan
pada tumpukan:
10
Masukkan 1 untuk lanjut
1
Masukkan elemen yang akan ditempatkan
pada tumpukan:
20
Masukkan 1 untuk lanjut
1
Masukkan elemen yang akan ditempatkan
pada tumpukan:
30
Masukkan 1 untuk lanjut
0
Masukkan 1 untuk mengambil elemen dari
tumpukan
1
Nilai yang diambil dari tumpukan
adalah 30
Masukkan 1 untuk mengambil elemen dari
tumpukan
1
Nilai yang diambil dari tumpukan
adalah 20
Masukkan 1 untuk mengambil elemen dari
tumpukan
1
Nilai yang diambil dari tumpukan
adalah 10
Masukkan 1 untuk mengambil elemen dari
tumpukan
11.11 Antrian
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/* Program untuk mensimulasikan antrian */
#include <stdio.h>
#define MAKS 10 /* Ukuran maksimum antrian */
#include <stdlib.h>
void sisip(int antrian[], int *belakang,
int nilai)
{
if(*belakang
< MAKS-1)
{
*belakang= *belakang +1;
antrian[*belakang] = nilai;
}
else
{
printf("Antrian penuh, tidak bisa menyisipkan suatu nilai\n");
exit(0);
}
}
void hapus(int antrian[], int *depan, int
belakang, int * nilai)
{
if(*depan
== belakang)
{
printf("Antrian kosong, tidak bisa menghapus suatu nilai\n");
exit(0);
}
*depan = *depan + 1;
*nilai = antrian[*depan];
}
void main()
{
int
antrian[MAKS];
int
depan,belakang;
int
n,nilai;
depan=belakang=(-1);
do
{
do
{
printf("Masukkan elemen yang akan disisipkan\n");
scanf("%d",&nilai);
sisip(antrian,&belakang,nilai);
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
} while(n == 1);
printf("Masukkan 1 untuk menghapus suatu elemen\n");
scanf("%d",&n);
while( n == 1)
{
hapus(antrian,&depan,belakang,&nilai);
printf("Nilai yang dihapus adalah %d\n",nilai);
printf("Masukkan 1 untuk menghapus suatu elemen\n");
scanf("%d",&n);
}
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
}
while(n == 1);
}
|
Masukkan elemen yang akan disisipkan
10
Masukkan 1 untuk lanjut
1
Masukkan elemen yang akan disisipkan
20
Masukkan 1 untuk lanjut
1
Masukkan elemen yang akan disisipkan
30
Masukkan 1 untuk lanjut
0
Masukkan 1 untuk menghapus suatu
elemen
20
Masukkan 1 untuk lanjut
0
14.12 Antrian Sirkular
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/* Program untuk mensimulasikan antrian
sirkular */
#include <stdio.h>
#define MAKS 10 /* Ukuran maksimum dari antrian */
#include <stdlib.h>
void sisip(int antrian[], int *belakang,
int depan, int nilai)
{
*belakang= (*belakang +1) % MAKS;
if(*belakang
== depan)
{
printf("Antrian penuh, nilai tidak bisa disisipkan\n");
exit(0);
}
antrian[*belakang] = nilai;
}
void hapus(int antrian[], int *depan, int
belakang, int * nilai)
{
if(*depan
== belakang)
{
printf("Antrian kosong, nilai tidak bisa dihapus\n");
exit(0);
}
*depan = (*depan + 1) % MAKS;
*nilai = antrian[*depan];
}
void main()
{
int
antrian[MAKS];
int
depan,belakang;
int
n,nilai;
depan=0; belakang=0;
do
{
do
{
printf("Masukkan elemen yang akan disisipkan\n");
scanf("%d",&nilai);
sisip(antrian,&belakang,depan,nilai);
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
} while(n == 1);
printf("Masukkan 1 untuk menghapus suatu elemen\n");
scanf("%d",&n);
while(
n == 1)
{
hapus(antrian,&depan,belakang,&nilai);
printf("Nilai yang dihapus adalah %d\n",nilai);
printf("Masukkan 1 untuk menghapus suatu elemen\n");
scanf("%d",&n);
}
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
} while(n
== 1);
}
|
Masukkan elemen yang akan disisipkan
10
Masukkan 1 untuk lanjut
1
Masukkan elemen yang akan disisipkan
20
Masukkan 1 untuk lanjut
1
Masukkan elemen yang akan disisipkan
30
Masukkan 1 untuk lanjut
0
Masukkan 1 untuk menghapus suatu
elemen
1
Nilai yang dihapus adalah 10
Masukkan 1 untuk menghapus suatu
elemen
1
Nilai yang dihapus adalah 20
Masukkan 1 untuk menghapus suatu elemen
1
Nilai yang dihapus adalah 30
Masukkan 1 untuk menghapus suatu
elemen
1
Antrian kosong, nilai tidak bisa
dihapus
11.13 Antrian Dengan Senarai Berantai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/* Program untuk mensimulasikan antrian
menggunakan senarai berantai */
#include <stdio.h>
#include <stdlib.h>
struct simpul
{
int
data;
struct simpul *link;
};
void sisip(struct simpul **depan, struct simpul
**belakang, int nilai)
{
struct simpul *temp;
temp=(struct simpul *) malloc(sizeof(struct simpul));
/*
menciptakan simpul baru
menggunakan nilai
yang dilewatkan sebagai parameter */
if(temp==NULL)
{
printf("Memori tidak tersedia\n");
exit(0);
}
temp->data = nilai;
temp->link=NULL;
if(*belakang
== NULL)
{
*belakang = temp;
*depan = *belakang;
}
else
{
(*belakang)->link = temp;
*belakang = temp;
}
}
void hapus(struct simpul **depan, struct simpul
**belakang, int *nilai)
{
struct simpul *temp;
if((*depan
== *belakang) && (*belakang == NULL))
{
printf("Antrian kosong, tidak bisa menghapus nilai\n");
exit(0);
}
*nilai = (*depan)->data;
temp = *depan;
*depan = (*depan)->link;
if(*belakang == temp)
*belakang = (*belakang)->link;
free(temp);
}
void main()
{
struct simpul *depan=NULL,*belakang = NULL;
int
n,nilai;
do
{
do
{
printf("Masukkan elemen yang akan disisipkan\n");
scanf("%d",&nilai);
sisip(&depan,&belakang,nilai);
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
} while(n == 1);
printf("Masukkan 1 untuk menghapus suatu elemen\n");
scanf("%d",&n);
while(
n == 1)
{
hapus(&depan,&belakang,&nilai);
printf("Nilai yang dihapus adalah %d\n",nilai);
printf("Masukkan 1 untuk menghapus sebuah elemen\n");
scanf("%d",&n);
}
printf("Masukkan 1 untuk lanjut\n");
scanf("%d",&n);
} while(n
== 1);
}
|
Masukkan elemen yang akan disisipkan
10
Masukkan 1 untuk lanjut
1
Masukkan elemen yang akan disisipkan
20
Masukkan 1 untuk lanjut
1
Masukkan elemen yang akan disisipkan
30
Masukkan 1 untuk lanjut
0
Masukkan 1 untuk menghapus suatu
elemen
1
Nilai yang dihapus adalah 10
Masukkan 1 untuk menghapus sebuah
elemen
1
Nilai yang dihapus adalah 20
Masukkan 1 untuk menghapus sebuah
elemen
1
Nilai yang dihapus adalah 30
Masukkan 1 untuk menghapus sebuah
elemen
1
Antrian kosong, tidak bisa menghapus
nilai
11.14 Menyisipkan Simpul Dengan Program
Rekursif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
/* Menyisipkan simpul dengan program
rekursif*/
#include <stdio.h>
#include <stdlib.h>
struct simpul
{
int
data;
struct simpul *link;
};
struct simpul *sisip(struct simpul *p, int
n)
{
struct simpul *temp;
if(p==NULL)
{
p=(struct simpul *)malloc(sizeof(struct simpul));
if(p==NULL)
{
printf("Error\n");
exit(0);
}
p-> data = n;
p-> link = NULL;
}
else
p->link = sisip(p->link,n); /* loop while
digantikan pemanggilan rekursif */
return
(p);
}
void tampilList ( struct simpul *p )
{
printf("Data di dalam list adalah\n");
while
(p!= NULL)
{
printf("%d\t",p-> data);
p = p-> link;
}
}
void main()
{
int
n;
int
x;
struct simpul *awal = NULL ;
printf("Masukkan simpula yang akan diciptakan \n");
scanf("%d",&n);
while ( n-- > 0 )
{
printf( "Masukkan nilai-nilai yang akan ditempatkan ke dalam
suatu simpul\n");
scanf("%d",&x);
awal = sisip ( awal, x );
}
printf("List yang diciptakan adalah\n");
tampilList ( awal );
}
|
Masukkan simpula yang akan diciptakan
5
Masukkan nilai-nilai yang akan
ditempatkan ke dalam suatu simpul
34
Masukkan nilai-nilai yang akan ditempatkan
ke dalam suatu simpul
54
Masukkan nilai-nilai yang akan
ditempatkan ke dalam suatu simpul
56
Masukkan nilai-nilai yang akan
ditempatkan ke dalam suatu simpul
76
Masukkan nilai-nilai yang akan
ditempatkan ke dalam suatu simpul
78
List yang diciptakan adalah
Data di dalam list adalah
34
54 56 76
78
11.15 Program Mengurutkan Dengan
Senarai Berantai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
/* Program mengurutkan list */
#include <stdio.h>
#include <stdlib.h>
struct simpul
{
int
data;
struct simpul *link;
};
struct simpul *sisip(struct simpul *p, int
n)
{
struct
simpul *temp;
if(p==NULL)
{
p=(struct
simpul *)malloc(sizeof(struct simpul));
if(p==NULL)
{
printf("Error\n");
exit(0);
}
p-> data = n;
p-> link = NULL;
}
else
{
temp = p;
while (temp-> link!= NULL)
temp = temp-> link;
temp-> link = (struct simpul *)malloc(sizeof(struct simpul));
if(temp
-> link == NULL)
{
printf("Error\n");
exit(0);
}
temp = temp-> link;
temp-> data = n;
temp-> link = NULL;
}
return(p);
}
void tampilList ( struct simpul *p )
{
printf("Nilai-nilai
data di dalam list adalah\n");
while
(p!= NULL)
{
printf("%d\t",p-> data);
p = p-> link;
}
}
/* fungsi untuk membalikkan */
struct simpul *terbalik(struct simpul *p)
{
struct simpul *prev, *curr;
prev = NULL;
curr = p;
while
(curr != NULL)
{
p = p-> link;
curr-> link = prev;
prev = curr;
curr = p;
}
return(prev);
}
/* fungsi untuk mengurutkan list */
struct simpul *urutList(struct simpul *p)
{
struct simpul *temp1,*temp2,*min,*prev,*q;
q =
NULL;
while(p
!= NULL)
{
prev
= NULL;
min = temp1 = p;
temp2 = p -> link;
while
( temp2 != NULL )
{
if (min -> data > temp2 -> data)
{
min = temp2;
prev = temp1;
}
temp1 = temp2;
temp2 = temp2-> link;
}
if(prev
== NULL)
p = min -> link;
else
prev -> link = min -> link;
min -> link = NULL;
if(
q == NULL)
q = min; /* memindahkan simpul dengan nilai data terendah di
dalam list yang ditunjuk
oleh p ke list
yang ditunjuk oleh q sebagai simpul pertama
*/
else
{
temp1 = q;
/* menjelajah list yang ditunjuk oleh q untuk
mendapatkan pointer ke simpul terakhir */
while( temp1 -> link != NULL)
temp1 = temp1 -> link;
/* memindahkan simpul dengan nilai data terendah
di dalam list yang ditunjuk oleh p ke list yang
ditunjuk oleh q di akhir list yang ditunjuk q */
temp1 -> link = min;
}
}
return
(q);
}
void main()
{
int n;
int
x;
struct simpul *awal = NULL ;
printf("Masukkan simpul yang akan diciptakan \n");
scanf("%d",&n);
while
( n-- > 0 )
{
printf( "Masukkan
nilai data yang akan ditempatkan ke suatu simpul\n");
scanf("%d",&x);
awal = sisip ( awal,x);
}
printf("List yang diciptakan adalah\n");
tampilList ( awal );
awal = urutList(awal);
printf("List yang terurut adalah\n");
tampilList ( awal );
awal = terbalik(awal);
printf("List yang terbalik adalah\n");
tampilList ( awal );
}
|
Masukkan simpul yang akan diciptakan
5
Masukkan nilai-nilai data yang akan
ditempatkan ke suatu simpul
23
Masukkan nilai-nilai data yang akan
ditempatkan ke suatu simpul
32
Masukkan nilai-nilai data yang akan
ditempatkan ke suatu simpul
54
Masukkan nilai-nilai data yang akan
ditempatkan ke suatu simpul
56
Masukkan nilai-nilai data yang akan
ditempatkan ke suatu simpul
67
List yang diciptakan adalah
Nilai-nilai data di dalam list adalah
23
32 54 56
67
List yang terurut adalah
Nilai-nilai data di dalam list adalah
23
32 54 56
67
List yang terbalik adalah
Nilai-nilai data di dalam list adalah
67
56 54 32
23
11.16 Program Menghapus Simpul Senarai Berantai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/* Program menghapus simpul senarai berantai
*/
#include <stdio.h>
#include <stdlib.h>
struct simpul *hapus ( struct simpul *, int
);
int panjang ( struct simpul * );
struct simpul
{
int
data;
struct simpul *link;
};
struct simpul *sisip(struct simpul *p, int
n)
{
struct simpul *temp;
if(p==NULL)
{
p=(struct simpul *)malloc(sizeof(struct simpul));
if(p==NULL)
{
printf("Error\n");
exit(0);
}
p-> data = n;
p-> link = NULL;
}
else
{
temp = p;
while
(temp-> link != NULL)
temp = temp-> link;
temp-> link = (struct simpul *)malloc(sizeof(struct simpul));
if(temp -> link == NULL)
{
printf("Error\n");
exit(0);
}
temp = temp-> link;
temp-> data = n;
temp-> link = NULL;
}
return
(p);
}
void tampilList ( struct simpul *p )
{
printf("Nilai-nilai
data di dalam list adalah\n");
while
(p!= NULL)
{
printf("%d\t",p->
data);
p
= p-> link;
}
}
void main()
{
int
n;
int
x;
struct simpul *awal = NULL;
printf("Masukkan jumlah simpul yang akan diciptakan
\n");
scanf("%d",&n);
while
( n-- > 0 )
{
printf(
"Masukkan nilai-nilai data yang akan ditempatkan pada simpul\n");
scanf("%d",&x);
awal = sisip ( awal, x );
}
printf("List sebelum penghapusan adalah\n");
tampilList ( awal );
printf("% \n Masukkan nomor simpul\n");
scanf ( " %d",&n);
awal = hapus (awal , n );
printf("List setelah penghapusan adalah\n");
tampilList ( awal );
}
/* fungsi untuk menghapus simpul tertentu*/
struct simpul *hapus ( struct simpul *p, int
simpul_no )
{
struct
simpul *prev, *curr ;
int
i;
if
(p == NULL )
{
printf("Tidak ada simpul yang akan dihapus \n");
}
else
{
if
( simpul_no > panjang (p))
{
printf("Error\n");
}
else
{
prev = NULL;
curr = p;
i = 1 ;
while ( i < simpul_no )
{
prev = curr;
curr = curr-> link;
i = i+1;
}
if ( prev == NULL )
{
p = curr -> link;
free ( curr );
}
else
{
prev -> link = curr -> link ;
free ( curr );
}
}
}
return(p);
}
/* fungsi untuk menghitung panjang senarai
berantai */
int panjang ( struct simpul *p )
{
int
count = 0 ;
while
( p != NULL )
{
count++;
p = p->link;
}
return
( count ) ;
}
|
Masukkan jumlah simpul yang akan
diciptakan
5
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
23
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
34
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
45
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
56
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
67
List sebelum penghapusan adalah
Nilai-nilai data di dalam list adalah
23
34 45 56
67
Masukkan nomor simpul
4
List setelah penghapusan adalah
Nilai-nilai data di dalam list adalah
23 34
45 67
11.17 Program Menyisipkan Simpul
Setelah Simpul Tertentu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/* Program untuk menyisipkan simpul setelah
simpul tertentu */
#include <stdio.h>
#include <stdlib.h>
int panjang ( struct simpul * );
struct simpul
{
int
data;
struct simpul *link;
};
/* fungsi untuk menyambung simpul baru ke
senarai yang sudan ada */
struct simpul *sisip(struct simpul *p, int
n)
{
struct simpul *temp;
if(p==NULL)
{
p=(struct simpul *)malloc(sizeof(struct simpul));
if(p==NULL)
{
printf("Error\n");
exit(0);
}
p-> data = n;
p-> link = NULL;
}
else
{
temp = p;
while (temp-> link != NULL)
temp = temp-> link;
temp-> link = (struct simpul *)malloc(sizeof(struct simpul));
if(temp -> link == NULL)
{
printf("Error\n");
exit(0);
}
temp = temp-> link;
temp-> data = n;
temp-> link= NULL;
}
return
(p);
}
/* fungsi yang menyisipkan simpul yang baru
diciptakan setelah simpul baru */
struct simpul * sisipBaru ( struct simpul
*p, int simpul_no, int nilai )
{
struct simpul *temp, * temp1;
int
i;
if
( simpul_no <= 0 || simpul_no > panjang (p))
{
printf("Error! simpul yang dimaksud tidak ada\n");
exit(0);
}
if
( simpul_no == 0)
{
temp = ( struct simpul * )malloc ( sizeof ( struct simpul ));
if ( temp == NULL )
{
printf( "Tidak bisa dialokasi \n");
exit (0);
}
temp -> data = nilai;
temp -> link = p;
p = temp ;
}
else
{
temp = p ;
i = 1;
while
( i < simpul_no )
{
i = i+1;
temp = temp-> link ;
}
temp1 = ( struct simpul * )malloc ( sizeof(struct simpul));
if
( temp == NULL )
{
printf ("Tidak bisa dialokasi \n");
exit(0);
}
temp1 -> data = nilai ;
temp1 -> link = temp -> link;
temp -> link = temp1;
}
return
(p);
}
void tampilList ( struct simpul *p )
{
printf("Nilai-nilai data di dalam list adalah\n");
while
(p!= NULL)
{
printf("%d\t",p-> data);
p = p-> link;
}
}
/* fungsi untuk menghitung panjang senarai
berantai */
int panjang ( struct simpul *p )
{
int
hitung = 0 ;
while
( p != NULL )
{
hitung++;
p = p->link;
}
return
( hitung ) ;
}
void main ()
{
int
n;
int
x;
struct simpul *awal = NULL;
printf("Masukkan jumlah simpul yang akan diciptakan
\n");
scanf("%d",&n);
while
( n-- > 0 )
{
printf( "Masukkan nilai-nilai data yang akan ditempatkan pada
simpul\n");
scanf("%d",&x);
awal = sisip ( awal, x );
}
printf("List sebelum penghapusan adalah\n");
tampilList ( awal );
printf(" \n Masukkan nomor simpul untuk disisipkan\n");
scanf ( " %d",&n);
printf("Masukkan nilai simpul\n");
scanf("%d",&x);
awal = sisipBaru(awal,n,x);
printf("Simpul setelah penyisipan adalah \n");
tampilList(awal);
}
|
Masukkan jumlah simpul yang akan
diciptakan
5
Masukkan nilai-nilai data yang akan ditempatkan
pada simpul
12
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
32
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
34
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
45
Masukkan nilai-nilai data yang akan
ditempatkan pada simpul
56
List sebelum penghapusan adalah
Nilai-nilai data di dalam list adalah
12
32 34 45
56
Masukkan nomor simpul untuk disisipkan
4
Masukkan nilai simpul
50000
Simpul setelah penyisipan adalah
Nilai-nilai data di dalam list adalah
12
32 34 45
50000 56
11.18 Program untuk Pohon Pencarian
Biner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/* Pohon pencarian biner */
#include <stdio.h>
#include <stdlib.h>
struct tsimpul
{
int
data;
struct tsimpul *L_anak, *R_anak;
};
struct tsimpul *sisip(struct tsimpul *p,int
nilai)
{
struct tsimpul *temp1,*temp2;
if(p
== NULL)
{
/*
sisip simpul baru sebagai akar */
p
= (struct tsimpul *) malloc(sizeof(struct tsimpul));
if(p
== NULL)
{
printf("Tidak bisa
dialokasi\n");
exit(0);
}
p->data = nilai;
p->L_anak=p->R_anak=NULL;
}
else
{
temp1 = p;
/* menjelajah pohon untuk mendapatkan pointer ke simpul
yang memiliki anak yang simpulnya baru dibuat*/
while(temp1
!= NULL)
{
temp2 = temp1;
if( temp1 ->data
> nilai)
temp1 = temp1->L_anak;
else
temp1 = temp1->R_anak;
}
if(
temp2->data > nilai)
{
/*sisip simpul yang baru dibuat menjadi anak kiri*/
temp2->L_anak = (struct
tsimpul*)malloc(sizeof(struct tsimpul));
temp2 = temp2->L_anak;
if(temp2 == NULL)
{
printf("Tidak dapat
dialokasi\n");
exit(0);
}
temp2->data = nilai;
temp2->L_anak=temp2->R_anak = NULL;
}
else
{
/*sisip simpul yang baru dibuat
menjadi anak kiri*/
temp2->R_anak = (struct tsimpul*)malloc(sizeof(struct tsimpul));
temp2 = temp2->R_anak;
if(temp2 == NULL)
{
printf("Tidak dapat dialokasi\n");
exit(0);
}
temp2->data = nilai;
temp2->L_anak=temp2->R_anak = NULL;
}
}
return(p);
}
/* fungsi yang menciptakan pohon biner */
void inorder(struct tsimpul *p)
{
if(p
!= NULL)
{
inorder(p->L_anak);
printf("%d\t",p->data);
inorder(p->R_anak);
}
}
void main()
{
struct tsimpul *akar = NULL;
int
n,x;
printf("Masukkan jumlah simpul\n");
scanf("%d",&n);
while(
n-- > 0)
{
printf("Masukkan nilai data\n");
scanf("%d",&x);
akar = sisip(akar,x);
}
inorder(akar);
}
|
Masukkan jumlah simpul
6
Masukkan nilai data
23
Masukkan nilai data
32
Masukkan nilai data
33
Masukkan nilai data
34
Masukkan nilai data
54
Masukkan nilai data
45
23
32 33 34
45 54
11.19 Program untuk Mencari Kunci Di Pohon
Pencarian Biner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
/* Program untuk mencari kunci pada pohon
pencarian biner */
#include <stdio.h>
#include <stdlib.h>
struct tsimpul
{
int
data;
struct tsimpul *L_anak, *R_anak;
};
/* Fungsi untuk mencari kunci di dalam pohon
biner */
struct tsimpul *cari( struct tsimpul *p,int
kunci)
{
struct tsimpul *temp;
temp = p;
while(
temp != NULL)
{
if(temp->data
== kunci)
return(temp);
else
if(temp->data
> kunci)
temp = temp->L_anak;
else
temp = temp->R_anak;
}
return(NULL);
}
/*fungsi iteratif untuk menata pohon biner*/
void inorder1(struct tsimpul *p)
{
struct tsimpul *tumpukan[100];
int
atas;
atas = -1;
if(p
!= NULL)
{
atas++;
tumpukan[atas] = p;
p = p->L_anak;
while(atas
>= 0)
{
while ( p!= NULL)/* menempatkann anak kiri pada tumpukan */
{
atas++;
tumpukan[atas] =p;
p = p->L_anak;
}
p = tumpukan[atas];
atas--;
printf("%d\t",p->data);
p = p->R_anak;
if ( p != NULL) /* menempatkan anak kanan pada tumpukan */
{
atas++;
tumpukan[atas] = p;
p = p->L_anak;
}
}
}
}
/* Fungsi untuk menyisipkan simpul baru di dalam
pohon biner
untuk menghasilkan pohon biner */
struct tsimpul *sisip(struct tsimpul *p,int
nilai)
{
struct tsimpul *temp1,*temp2;
if(p
== NULL)
{
/* menyisipkan simpul baru sebagai simpul akar */
p
= (struct tsimpul *) malloc(sizeof(struct tsimpul));
if(p
== NULL)
{
printf("Tidak bisa dialokasikan\n");
exit(0);
}
p->data = nilai;
p->L_anak=p->R_anak=NULL;
}
else
{
temp1 = p;
/* menjelajah pohon untuk menghasilkan pointer ke simpul
dengan anak yang baru diciptakan */
while(temp1
!= NULL)
{
temp2 = temp1;
if( temp1 ->data > nilai)
temp1 = temp1->L_anak;
else
temp1 = temp1->R_anak;
}
if(
temp2->data > nilai)
{
/*menyisipkan simpul yang baru tercipta sebagai anak kiri */
temp2->L_anak = (struct tsimpul*)malloc(sizeof(struct tsimpul));
temp2 = temp2->L_anak;
if(temp2 == NULL)
{
printf("Tidak bisa dialokasikan\n");
exit(0);
}
temp2->data = nilai;
temp2->L_anak=temp2->R_anak = NULL;
}
else
{
/*menyisipkan simpul yang baru tercipta sebagai anak kiri*/
temp2->R_anak = (struct tsimpul*)malloc(sizeof(struct tsimpul));
temp2 = temp2->R_anak;
if(temp2 == NULL)
{
printf("Tidak bisa dialokasikan\n");
exit(0);
}
temp2->data = nilai;
temp2->L_anak=temp2->R_anak = NULL;
}
}
return(p);
}
void main()
{
struct tsimpul *akar = NULL, *temp = NULL;
int
n,x;
printf("Jumlah simpul di dalam pohon\n");
scanf("%d",&n);
while(
n-- > 0)
{
printf("Masukkan nilai data\n");
scanf("%d",&x);
akar = sisip(akar,x);
}
printf("Pohon yang tercipta adalah :\n");
inorder1(akar);
printf("\n Masukkan kunci simpul yang dicari\n");
scanf("%d",&n);
temp=cari(akar,n);
if(temp
!= NULL)
printf("Nilai data ada di dalam pohon \n");
else
printf("Nilai data tidak ada di dalam pohon \n");
}
|
Jumlah simpul di dalam pohon
7
Masukkan nilai data
34
Masukkan nilai data
43
Masukkan nilai data
45
Masukkan nilai data
56
Masukkan nilai data
54
Masukkan nilai data
65
Masukkan nilai data
66
Pohon yang tercipta adalah :
34
43 45 54
56 65 66
Masukkan kunci simpul yang dicari
65
Nilai data ada di dalam pohon
No comments:
Post a Comment