pratikum Algoritma & Struktur Data
Jumat, 19 Juli 2013
Kamis, 11 Juli 2013
Kamis, 18 Oktober 2012
Analisis SWOT
Dari
Wikipedia bahasa Indonesia, ensiklopedia bebas
Diagram ilustrasi analisis SWOT.
Analisis SWOT adalah metode perencanaan strategis yang digunakan untuk mengevaluasi kekuatan (strengths),
kelemahan (weaknesses), peluang (opportunities), dan ancaman (threats)
dalam suatu proyek atau suatu spekulasi bisnis.
Keempat faktor itulah yang membentuk akronim SWOT (strengths, weaknesses, opportunities,
dan threats). Proses ini melibatkan penentuan tujuan yang spesifik dari
spekulasi bisnis atau proyek dan mengidentifikasi faktor internal dan eksternal
yang mendukung dan yang tidak dalam mencapai tujuan tersebut. Analisis SWOT
dapat diterapkan dengan cara menganalisis dan memilah berbagai hal yang
mempengaruhi keempat faktornya, kemudian menerapkannya dalam gambar matrik
SWOT, dimana aplikasinya adalah bagaimana kekuatan (strengths) mampu
mengambil keuntungan (advantage) dari peluang (opportunities)
yang ada, bagaimana cara mengatasi kelemahan (weaknesses) yang mencegah
keuntungan (advantage) dari peluang (opportunities)yang ada,
selanjutnya bagaimana kekuatan (strengths) mampu menghadapi ancaman (threats)
yang ada, dan terakhir adalah bagimana cara mengatasi kelemahan (weaknesses)
yang mampu membuat ancaman (threats) menjadi nyata atau menciptakan
sebuah ancaman baru.
Teknik ini dibuat oleh Albert Humphrey, yang memimpin proyek riset pada Universitas Stanford pada dasawarsa 1960-an dan 1970-andengan menggunakan data dari perusahaan-perusahaan Fortune 500.[1]
The Value Chain and Competitive Advantage
Konsep value chain (VC) memungkinkan
perusahaan mendapatkan competitive advantage melalui cost
leadership, differentiation, atau keduanya. Untuk dapat mengerti competitive
advantage suatu perusahaan, tidak bisa perusahaan dilihat sebagai satu
keseluruhan, tetapi sebagai aktivitas-aktivitas yang saling berhubungan. Aktivitas-aktivitas
itu harus diselidiki secara sistematis bagaimana kinerja dan interaksinya.
Value chain perusahaan membentuk suatu hubungan aktivitas
yang lebih besar yang disebut value system. Value chain perusahaan
berbeda-beda yang merefleksikan sejarah, strategi, dan kesuksesan
implementasinya. Dan tiap perusahaan mempunyai lingkup kompetitif (competitive
scope) yang berbeda-beda yang mencerminkan suatu sumber potensi competitive
advantage. Untuk memperoleh dan mempertahankan competitive
advantage tidak hanya tergantung value chain perusahaan
tetapi bagaimana perusahaan menyesuaikan dengan value system secara
keseluruhan.
Gambar: The Value System
... gambar tidak dimasukkan di halaman web ini!
... gambar tidak dimasukkan di halaman web ini!
Hakekatnya, perusahaan adalah kumpulan aktivitas yang
dilakukan untuk mendesain, memproduksi, mamasarkan, menyampaikan, dan mendukung
produknya. Pelaksanaan aktivitas memerlukan biaya untuk menghasilkan value yang
merupakan jumlah di mana konsumen mau membayarnya. Selisih antara total
value dengan biaya adalah margin. Jadi value chain berisi value
activities dan margin. Value activities itu
sendiri terdiri dari aktivitas primer (primary activities) yang
berhubungan secara fisik dengan pembuatan produk, penjualan, transfer kepada
konsumen, serta layanan purna jual, dan aktivitas pendukung (support
activities) yang mendukung aktivitas primer melalui pembelian masukan,
teknologi, sumber daya manusia, dan fungsi lainnya.
Analisis dari value chain lebih
sesuai untuk examine compettive advantage ketimbang value
added. Value added bukanlah basis baik untuk analisa biaya
karena tidak secara benar memisahkan raw materials dari
masukan lain yang dipergunakan dalam aktivitas perusahaan. Lebih jauh, value
added gagal meng-highlightshubungan antara perusahaan dan
pemasoknya yang dapat menurunkan biaya atau memperbesar differensiasi.
Gambar: The Generic Value Chain
... gambar tidak dimasukkan di halaman web ini!
... gambar tidak dimasukkan di halaman web ini!
Aktivitas Primer
Aktivitas-aktivitas primer terdiri atas lima kategori:
- Inbound
Logistics. Aktivitas yang berhubungan penerimaan,
penuyimpanan, dan penyebaran masukan ke produk, seperti: penanganan
material, pergudangan, pengendalian persediaan, penjadwalan kendaraan, dan
pengembalian ke pemasok.
- Operation.
Aktivitas yang berhubungan dengan pengubahan masukan menjadi produk jadi,
seperti: permesinan, pengemasan, pemasangan, perawatan mesin, pengujian,
penyetakan, dan operasi fasilitas.
- Outbound
Logistics. Aktivitas yang berkaitan dengan pengumpulan,
penyimpanan, dan pendistribusian produk secara fisik kepada pembeli, seperti:
penggudangan barang jadi, penanganan material, operasi kendaraan
pengiriman, pemrosesan pesanan, dan penjadwalan.
- Marketing
and Sales. Aktivitas yang berhubungan dengan penyediaan
sarana di mana pembeli dapat membeli produk dan membujuk mereka untuk melakukannya,
seperti: periklanan, promosi, tenaga penjualan, quoting,
seleksi channel, channel relation, dan penetapan
harga.
- Service.
Aktivitas yang berhubungan dengan penyediaan jasa untuk meningkatkan atau
mempertahankan nilai produk, seperti: instalasi, perbaikan, pelatihan,parts
supply, dan penyesuaian produk.
Aktivitas Pendukung
Sedangkan aktivitas-aktivitas pendukung terdiri dari:
- Procurement.
Mengacu pada fungsi dari pembelian masukan yang dipergunakan dalam value
chain perusahaan, bukan pada masukan yang dibeli itu sendiri.
- Technology
Development. Terdiri dari sejumlah aktivitas yang dapat
dikelompokkan secara luas dalam usahanya memperbaiki produk dan proses.
- Human
Resource Management. Terdiri dari aktivitas-aktivitas yang meliputi:
perekrutan, hiring, pelatihan, pengembangan, dan kompensasi
untuk semua jenis personil.
- Firm
Infrastructure. Terdiri dari sejumlah aktivitas yang
meliputi: manajemen umum, perencanaan, pendanaan, akuntansi, hukum, government
affairs, dan manajemen kualitas.
Jenis Aktivitas
Dalam setiap kategori aktivitas primer dan pendukung,
ada tiga jenis aktivitas yang memainkan peranan yang berbeda dalam competitive
advantage:
- Direct.
Aktivitas yang terlibat langsung dalam penciptaan value pada
pembeli, seperti: assembly, parts machining,
operasi tenaga penjualan, periklanan, desain produk, rekruitmen, dsb.
- Indirect.
Aktivitas yang memungkinkan untuk dilakukannya aktivitas langsung dalam
basis yang kontinu, seperti: perawatan, penjadwalan, operasi fasilitas,
administrasi tenaga penjualan, administrasi riset, penyimpanan catatan
vendor, dsb.
- Quality
assurance. Aktivitas yang menjamin kualitas dari aktivitas
lain, seperti: monitoring, inspeksi, pengujian, reviewing,
pengecekan, penyesuaian, danreworking.
Defining the Value Chain
Dimulai dengan generic chain, value
activities individual diidentifikasi pada perusahaan tertentu. Setiap
generic strategy dapat dibagi ke dalam descrete activities.Prinsip
dasar terhadap isolasi dan pemisahan aktivitas, yaitu: (1) mempunyai ekonomi
yang berbeda, (2) mempunyai dampak potensial yang tinggi atas differensiasi,
atau (3) mewakili proporsi biaya yang signifikan atau growing. Value
activities harus di-assigned kepada kategori yang paling
baik mewakili kontribusinya dalamcompetitive advantage perusahaan.
Segala sesuatu yang dilakukan perusahaan harus dimasukkan dalam aktivitas
primer atau pendukung.
Hubungan dalam Value Chain
Aktivitas dalam value chain bukan
aktivitas yang independen melainkan interdependen. Hubungan antar aktivitas
mempengaruhi kinerja dan biaya aktivitas lainnya. Penyebab dari hubungan
tersebut adalah sebagai berikut:
- Fungsi
yang sama dapat dilakukan dengan cara yang berbeda.
- Biaya
atau kinerja direct activities diperbaiki dengan usaha
yang lebih di indirect activities.
- Aktivitas
yang dilakukan di dalam perusahaan mengurangi kebutuhan untuk
memperagakan, menjelaskan, atau melayani produk di lapangan.
- Fungsi quality
assurance dapat dilakukan dengan cara yang berbeda.>
Hubungan Vertikal
Hubungan (linkages) tidak hanya terjadi di antara value
chain perusahaan tetapi juga value chain pemasok
dan channels, hubungan ini disebut hubungan vertikal. Dalam
hal ini bagaimana aktivitas dari pemasok atau channel dilakukan
akan mempengaruhi kinerja dari aktivitas perusahaan. Hubungan ini menyediakan
kesempatan bagi perusahaan untuk meningkatkan competitive advantage-nya.
Value Chain Pembeli
Pembeli juga memiliki value chain, dan
produk perusahaan mewakili masukan yang dibeli untuk chain pembeli.
Differensiasi perusahaan diturunkan secara dasar dari pembuatan value untuk
pembeli malalui pengaruh perusahaan terhadap value chain pembeli. Value tersebut
diciptakan ketika perusahaan membuatcompetitive advantage untuk
pembelinya – menurunkan biaya pembeli atau meningkatkan kinerja pembeli.
Lingkup Kompetitif (Competitive Scope)
dan Value Chain
Lingkup kompetitif dapat memilliki pengaruh yang besar
pada competitive advantage, karena membentuk konfigurasi dan
ekonomi dari value chain. Ada empat dimensi lingkup yang
mempengaruhi value chain:
- Lingkup
Segmen.
Varietas produk yang dihasilkan dan pembeli yang dilayani.
- Lingkup
Vertikal.
Aktivitas yang dilakukan sendiri ketimbang perusahaan lain.
- Lingkup
Geografis. Meliputi daerah, negara, atau sekelompok negara
di mana perusahaan berkompetisi dengan strategi yang terkoordinasi.
- Lingkup
Industri.
Meliputi industri yang berkaitan di mana perusahaan berkompetisi dengan
strategi yang terkoordinasi.
Lingkup yang luas (broad scope) memungkinkan
perusahaan menggali manfaat aktivitas internal yang makin baik dan manfaat
dari interrelationship value chain di banyak lingkup segmen.
Sedangkan lingkup yang sempit (narrow scope) memungkinkan terjadinya
perbaikan value dengan hanya melayani segmen tertentu.
Perusahaan dapat menggunakan salah satu atau kedua lingkup di atas, tergantung
kemampuan perussahaan.
Koalisi dan Lingkup
Koalisi seperti lisensi teknologi dan joint
venture memungkinkan terjadinya vertical koalisi vertikal dan
horisontal yang berdampak terhadap competitive advantage perusahaan
tergantung bagaimana pembagian gain akibat koalisi ini. Cara
ini memungkinkan lingkup perusahaan yang lebih luas tanpa memekarkan
perusahaan.
Lingkup Kompetitif dan Definisi Bisnis
Batasan unit bisnis diperoleh melalui dari lingkup
kompetitive dan value chain dengan mempertimbangkan manfaat
integrasi dan de-integrasi, dan dengan membandingkan kekuatan dari interrelationship dalam
segmen yang berhubungan, area geografis, atau industri.
The Value Chain dan Struktur Industri
Struktur industri ditentukan dari daya tawar-menawar
produsen dan konsumen yang dicerminkan dari gambaran value chain perusahaan
dan bagaimana margindibagi antara keduanya.
The Value Chain and Struktur
Organisasi
Untuk mendapatkan dan mempertahankan competitive
advantage, penggunaan value chain untuk menentukan struktur
organisasi yang memadai. Aktivitas yang mempunyai kesamaan dikelompokkan dan
yang berbeda dipisahkan sehingga diperlukan koordinasi atau optimisasi hubungan
(linkage optimization). Struktur organisasi menyeimbangkan manfaat
pemisahan dan integrasi.
Strategic Cost Management and the Value Chain
Konsep
Menurut Porter, bisnis bisa dikembangkan untuk
mengarah kepada competitive advantage dengan salah satu dari
dua strategi: low cost strategy ataudifferentiation
strategy.
Low cost strategy
Low cost strategy memfokuskan kepada
terciptanya low cost relatif terhadap pesaing, jadi
berhubungan dengan cost leadership. Cost leadership dapat
dicapai dengan pendekatan-pendekatan:
- Skala
ekonomis dalam produksi
- Efek-efek experience
curve
- Tight
cost control
- Cost minimization di
berbagai sektor, seperti R&D, jasa, tenaga penjualan, atau periklanan.
Differentiation strategy
Differentiation strategy memfokuskan pada penciptaan
sesuatu berupa keunikan dalam pandangan pelanggan. Keunikan produk dapat
diciptakan dengan berbagai pendekatan, seperti: brand loyalty (coca-cola), superior
customer service (IBM), dealer network (caterpillar
tractors), desain dan fitur produk (hewlett-packard), atau teknologi (coleman).
A Framework of Interdependence
Value chain framework memperlihatkan bagaimana
produk dari perusahaan dihubungkan dengan value chain dari
pembeli. Dengan framework ini, sebagai contoh: diperlihatkan hubungan
bagaimana persentase dari biaya produk perusahaan dalam hubungannya dengan
total biaya akhir dari pembeli. Faktor memperlihatkan bahwa untuk industri
kertas, lebih dari 40% total biaya majalah dapat digunakan secara penuh dalam
pendorongan industri kertas dan untuk digunakan dalam aktivitas pengurangan
biaya.
Metodologi
Konsep dari value chain memperlihatkan metodologi yang
unik, dan meliputi beberapa langkah:
1.
<>Mengidentifikasi value chain dari industri
lalu melihat biaya, pendapatan, dan asset untuk value activities yang ada.
2.
Melihat cost driver yang mengatur masing-masing value
activities.
3.
Mengembangkan keunggulan kompetaitif yang dapat
menopang, di mana keseluruhan biaya pengendalian lebih baik dari
pesaing-pesaing atau dengan merekonfigurasi value chain.
Identifying Value Chain
Langkah pertqama di dalam membuat dan menggunakan
value cahin adalah dengan mengidentifikasikan value chain dari industri.
Aktivitas-aktivitas yang ada harus digabungkan dan
dipisahkan jika mengembangkan beberapa atau semua dari kondisi-kondisi:
- Memperlihatkan
persentase yang signifikan dari biaya operasi
- Perilaku
biaya dari aktivitas-aktivitas adalah berbeda
- Aktivitas-aktivitas
tersebut juga dikembangakan oleh pesaing tetapi dengan cara yang berberda
- Aktivitas-aktivitas
tersebut mengembangkan sebuah differentiation
Diagnosing Cost Drivers
Tahap kedua di dalam membuat dan menggunakan value
chain adalah dengan mengenal cost driver yang
menerangkan variasi di dalam biaya dalam tiap-tiap nilai aktivitas.
Percobaan-percobaan telah dilakukan untuk membuat
daftar yang menyeluruh atas cost driver. Di dalam literatur
manajemen strategi, daftar yang baik atas cost-driver tercantum:
Daftar atas cost driver tersebut
dipisahkan atas dua kategori:
- Structural
cost driver
- Executional
cost driver
Structural Cost Driver
Di dalam structural cost driver, palling
tidak ada lima pilihan yang harus dilakukan perusahaan berkaitan dengan
struktur ekonomi:
- Skala: bagaimana ukuran dari investasi yang akan
dilakukan si dalam manufacturing, R&D, dan marketing
resources?
- Ruang lingkup: bagaimana tingkat dari integrasi
vertikal? (integrasi horizontal lebih berhubungan dengan ruang lingkup)?
- Pengalaman: berapa kali terjadi di waktu-waktu
yang lalu, yang telah dilakukan perusahaan, yang akan dilakukan lagi?
- Teknologi: proses teknologi yang digunakan di
dalam tiap-tiap value chain perusahaan?
- <>Kompleksitas: berapa banyak product line
atau service line diberikan kep0ada pelanggan?
Executional Cost Driver
Executional cost driver menjelaskan posisi biaya
perusahaan sehubungan dengan kemampuan mencapai kesuksesan.
Daftar yang mendasar atas executional cost
driver, paling tidak mencakup:
- Work force involvement "partisipasi":
apakah tenaga-tenaga kerja memiliki komitmen untuk kelanjutan usaha? - Total Quality Management (TQM):
apakah tenaga kerja yang ada memiliki komitmen terhadap kualitas produk secara total? - Capacity utilization:
apakah pilihan atas skala konstruksi maksimum? - Plant layout efficiency
- Product configuration:
apakah desain atau formulasi produk sudah efektif? - Linkages with suppliers or customers:
apakah hubungan dengan pemasok atau pelanggan sudah dieksploitasi, sehubungan dengan value chain dari perusahaan?
Fundamental Cost Driver
Dasar pemikiran dari fundamental cost driver ini
antara lain:
1.
Value chain as the broader framework
konsep dari cost driver merupakan cara untuk dapat mengerti perilaku biaya di dalam masing-masing aktivitas di dalam value chain.
konsep dari cost driver merupakan cara untuk dapat mengerti perilaku biaya di dalam masing-masing aktivitas di dalam value chain.
2.
Volume is not enough
untuk analisis strategi, volume bukan cara yang dapat digunakan sepenuhnya untuk menjelaskan perilaku biaya.
untuk analisis strategi, volume bukan cara yang dapat digunakan sepenuhnya untuk menjelaskan perilaku biaya.
3.
Structural choices and executional skills
4.
Relevant strategic drivers
tidak semua strategic driver dapat dikatakan penting sepanjang waktu walaupun beberapa adalah penting di semua kasus.
tidak semua strategic driver dapat dikatakan penting sepanjang waktu walaupun beberapa adalah penting di semua kasus.
5.
Cost analysis framework
untuk masing-masing cost driver, framework atas analisis biaya diperlukan untuk memahami positioning perusahaan.
untuk masing-masing cost driver, framework atas analisis biaya diperlukan untuk memahami positioning perusahaan.
6.
Cost driver specific to activities
aktivitas-aktivitas yang berbeda di dalam value chain dipengaruhi oleh customer-customer yang berbeda.
aktivitas-aktivitas yang berbeda di dalam value chain dipengaruhi oleh customer-customer yang berbeda.
Developing Sustainable Competitive Advantage
Tahap ketiga dalam membangun dan menggunkan value
chain adalah dengan mengembangkan competitive advantage
yang dapat menopang. Untuk masing-masing aktivitas, pertanyaan-pearatanyaan
utama dapat mengembangkan competaaitive advantage yang dapat menopang adalah:
1.
Dapatkah biaya-biaya di dalam aktivitas tersebut
diturunkan, dengan value (pendapatan) konstan?
2.
Dapatkah value (pendapatan)
ditingkatkan dalam aktivitas-aktivitas ini, dengan mempertahankan biaya
konstan?
Cost Reduction
Dengan analisa-analisa biaya, pendapatan,dan asset
secara sistematis dalam tiap-tiap aktivitas, perusahaan bisa mencapai baik
differensiasi dan low cost.
Value Increase
Untuk melanjutkan fokus atas pengaturan value
chain yang ada agar lebih baik dari pesaing, perusahaan harus
memberikan perhatian lebih untuk dapat mengidentifikasi, di mana hasil
dari value chain dapat significant.
Power of Value Chain Analysis: a Case Study
Seksi ini menyajikan kasus sebagai ilustrasi konsep
dan metodologi value chain. Exhibit 2 - artikel memperlihatkan
suatu contoh income statement dan balance sheet dari
sebuah perusahaan penerbangan (misal: ajax airlines). Ini menyatakan banyak hal
mengenai perusahaan, tetapi tidak ada yang berhubungan dengan value
chain. Mengkombinsikan dengan pelaporan keuangan yang menggunakan Du
Pont Analysis (exhibit 3 – artikel) dapat memperlihatkan fakta yang
konvensional tetapi tidak banyak yang berhubungan dengan strategi bisnis.
Profit Margins
Du Pont Analysis memperlihatkan profit margin
dari ajax dapat ditingkatkan sehubungan dengan penjualan. Dalam hal ini
perusahaan tersebut dapat menjual lebih banyak tiket, ketika biaya operasional
menurun per dollar penjualan. Asset utilization – yang
merupakan critical factor dalam industri penerbangan – juga
dikembangkan seiring dengan pengembangan dari asset turnover (0,857
ke 0,917).
Traditional Management Accounting Analysis
Akuntansi manajemen tradisional melengkapi informasi
tambahan mengenai ajax airlines, di mana juga mangabaikan persfektif value
chain. Akuntansi biaya tradisonal bisa memperkirakan bahwa di dalam
industri dengan biaya tetap yang tinggi, contribution analysis adalah
merupakan kuncinya. Exhibit 4 – artikel memperlihatkan analisis untuk ajax
airlines dengan mempergunakan kursi per mil terbang sebagai unit pengukuran.
Analisis value chain juga
memperlihatkan bahwa operasi pesawat terbang tidaklah murni biaya tetap,
seperti yang disarankan akuntansi manajemen tradisional. Ketika jumlah kursi
per mil terbang meningkat 14%, biaya operasi meningkat 28%.
Comparative Analysis
Harus diperhatikan bahwa kemungkinan untuk
memperlikhatkan analisis value chain yang komparatif
sehubungan dengan perusahaan-perusahaan pesaing, meningkat value dari
tekniknya. Exhibit 6 – artikel memperlihatkan contoh yang sederhana dari
prospektif atas perbandingan value chain, yang memperlihatkan sebuah chart
yang dipersiapkan dari informasi yang dapat dipublikasikan untuk dua perusahaan
penerbangan yang berbeda: united airlines dan people express. Secara spesifik
keputusan strategi tersebut didaftarkan di dalam exhibit 7 – artikel, dimana
terdapat perbedaan biaya $13.800 per 10.000 kursi per mil terbang antara dua
perusahaan tersebut.
A Strategy for Competitive Advantage
Analisis biaya secara tradisional memfokuskan atas
perhatian kepada value added dengan terjadinya kesalahan dan
bahwa hal tersebut adalah satu-satunya area di mana perusahaan dapat
mempengaruhi biaya.
Value added sudah mulai ditinggalkan dengan alasan-alasan:
1.
Adanya perlakuan yang berbeda antara raw material dan
pembelian beberapa masukan yang lain.
2.
Value added tidak bisa menandakan hal-hal yang potensial
untuk dihubungkan dengan suatu pandangan untuk mengurangi biaya atau penciptaan
differensiasi produk.
3.
Competitive advantage tidak dapat digunakan secara
penuh dengan adanya interaksi antara raw material yang dibeli
dengan biaya lainnya.
Dapat disimpulkan, bahwa metodologi untuk membuat dan
menggunakan value chain mencakup langkah-langkah:
1.
Mengidentifikasi value chain dari
industri, lalu membuat daftar biaya, pendapatan, dan asset untuk tiap-tiap
aktivitas.
2.
Mengidentifikasi cost drivers yang
mengatur setiap value activity.
3.
Membangun sustainable competitive advantage,
baik dengan mengendalikan cost drivers lebih baik dari pesaing
atau dengan merekonfigurasi value chain.
Exhibit 8 – artikel memperlihatkan suatu kesimpulan
mengenai perbedaan antara value chain dengan akuntansi
manajemen tradisional.
Akhirnya sebagai penutup, perspektif value
chain dapat digunakan untuk menurunkan beberapa pandangan berikut:
- Value
chain analysis sebagai langkah awal pemahaman bagaimana
posisi perusahaan dalam industri
- Sekali value
chain diartikulasikan secara penuh, keputusan strategis yang
kritis menjadi lebih jelas
- Value
chain analysis membantu mengukur daya pemasok dengan
manghitung persentase total keuntungan yang diatribusikan ke supplier
- Value
chain framework menjelaskan bagaimana produk perusahaan
sesuai dengan value chain pembeli
- Dalam
analisis akhir, pencapaian simultan dari biaya rendah dan differensiasi
tergantung dari pemahaman yang memadai dari driver biaya,
penghasilan, dan asset pada setiap value activity dan
interdepedensi di antara value activities.
Referensi
Senin, 25 Juni 2012
stack dan queue dengan array
BAB 6
STACK DAN QUEUE
DENGAN ARRAY
1.
Pengertian Stack Dan Queue
Tumpukan
dapat diartikan sebagai suatu kumpulan data yang seolah-olah terlihat
sepertiada data yang diletakkan di atas data yang lain seperti pada gambar 01.
Saat kita ingin mengambil data A, maka data-data yang berada di atasnya
haruslah lebih dulu dikeluarkan (di-POP ). Hal ini membuat tumpukan / stack
memiliki ciri-ciri Last In First Out ( LIFO ) yang berarti data yang
masuk terakhir akan keluar pertama.
Sedangkan
queue / antrian hampir mirip dengan stack, tapi hanya saja, data yang masuk
pertama kali akan keluar pertama kali dari Queue.
( Bisa dilihat pada gambar 02 ). FIFO (
First In First Out )
|
E
|
D
|
C
|
B
|
A
|
Gambar 01
A
|
B
|
C
|
D
|
E
|
|
Gambar 02
2. Penyajian Stack Dan Queue
Stack dan/atau Queue dapat
disajikan baik dengan Array maupun dengan struct. Pada Array, stack ataupun
queue yang disajikan bersifat statis. Ini disebabkan karena jumlah maksimal
data pada array sudah ditentukan sejak awal.
Contoh
deklarasi stack dengan struct :
Struct stack
{
char data;
stack*next;
};
3. Operasi Pada Stack Dan Queue
Dalam penyajian stack dan
queue, ada 2 proses yang terjadi, yaitu pemasukan data (PUSH) dan
pengeluaran data (POP). Seperti yang sudah dijelaskan bahwa array itu
memiliki jumlah maksimal, maka pada proses PUSH, perlu pengecekan apakah
data yang di-PUSH di stack / queue melebihi jumlah maksimal array atau
tidak.
Contoh
algoritma untuk proses PUSH (stack dan queue ) adalah sebagai berikut :
0.
Masukkan inputan ( x )
1.
Jika variable cek ( c ) = nilai maksimal array ( max ), kerjakan langkah 2.
Jika tidak, kerjakan langkah 3.
2.
cetak ”TUMPUKAN PENUH”
Contoh
algoritma untuk proses POP pada stack adalah sebagai berikut :
0.
Jika c = 0, maka kerjakan langkah 2. Jika tidak, lakukan langkah 3.
1.
cetak ”TUMPUKAN KOSONG”
CONTOH
:
Program
stack yang mempunyai fungsi proses PUSH dan proses POP di dalamnya. ( stack
dideklarasikan dengan array )
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<stdlib.h>
void
main()
{
char
A[10];
int
dpn,blk;
char cek;
int z;
dpn=0;
blk=-1;
do{
clrscr();
printf("1.
tambah antrian\n");
printf("2.
hapus antrian\n");
printf("3.
lihat antrian\n");
printf("4.
exit\n");
printf("silahkan
berikan pilihan anda: ");
cek=getche();
if
(cek!='1' && cek!='2' && cek!='3' && cek!='4')
printf("\n
anda salah mengetikan inputan!\n");
else
{
if(cek=='1')
{
if(blk==9)
{
printf("\n
maaf antrian penuh\n");
}
blk++;
printf("\n
silahkan masukan inputan : ");
A[blk]=getche();
getch();
}
else
if(cek=='2')
{
if(dpn>blk)
{
printf("\n
maaf antrian kosong\n");
}
for(int
v=0;v<=blk;v++)
{
A[v]=A[v+1];
}
blk--;
printf("\n
proses penghapusan berhasil");
}
else if
(cek=='3')
{
if
(dpn>blk)
{
printf("\n
maaf antrian kosong\n");
}
printf("\n\n
ada %i antrian\n",(blk+1)-dpn);
for(z=0;
z<=blk; z++)
printf("|
%c |",A[z]);
getch();
}
}
}
while(cek!='4');
}
|
Tampilan
pada layar
Melakukan
tambahan antrian
Melakukan hapus antrian
Analisa :
Program
di atas merupakan program stack yang mempunyai fungsi proses PUSH dan proses
POP di dalamnya, stack dideklarasikan dengan array dengan fungsi antrian dimana
dalam program tersebut terdapat menu pilihan dintaranya tambah antrian, hapus
antrian, lihat antrian dan exit. Ketika menginputkan tambah maka akan terus di
tambahkan, dan yang pertama di inputkan yang pertama di eksekusi apabila
memilih hapus antrian, seperti contoh di atas, pertama melakukan tambah antian
dimana menginputkan 1 2 3 4 5, kemudian di hapus antrian dan di tambahkan lagi
nilai 8 dan 9 sehingga hasilnya 3 4 5 8 9.
SOAL
LATIHAN :
1. Coba buat program stack
(tumpukan) dengan fungsi PUSH dan POP yang
terpisah
dari program utama!
#include<stdio.h>
#include<conio.h>
//deklarasi 'STACK' dengan struct dan array
typedef struct STACK
{
int data[5];
int atas;
};
//deklarasi variabel 'tumpuk' dari struct
STACK tumpuk;
void main()
{
clrscr();
int pilihan,baru,i;
//inisialisasi awal
tumpuk.atas=-1;
do
{
clrscr();
printf("1.Push Data\n");
printf("2.Pop Data\n");
printf("3.Print Data\n");
printf("\nPilihan = ");
scanf("%i",&pilihan);
switch(pilihan)
{
case 1:
{
if(tumpuk.atas==5-1)
{
printf("Tumpukan penuh");
getch();
}
else
{
printf("Data yang akan di-push =
");
scanf("%d",&baru);
tumpuk.atas++;
tumpuk.data[tumpuk.atas]=baru;
}
break;
}
case 2:
{
if(tumpuk.atas==-1)
{
printf("Tumpukan kosong");
getch();
}
else
{
printf("Data yang akan di-pop =
%d", tumpuk.data[tumpuk.atas]);
tumpuk.atas--;
getch();
}
break;
}
case 3:
{
if(tumpuk.atas==-1)
{
printf("Tumpukan kosong");
getch();
}
else
{
printf("Data = ");
for(i=0; i<=tumpuk.atas; i++)
{
printf("%d ",tumpuk.data[i]);
}
getch();
}
break;
}
default:
{
printf("\nTidak ada dalam
pilihan");
}
}
}while(pilihan>=1 &&
pilihan<=3);
getch();
}
|
Tampilan
pada layar
Melakukan
push
Melakukan
pop
Hasil
setelah melakukan pop
Analisa
:
Program di atas merupakan
program tumpukan dengan fungsi push dan pop. Dalam program di atas user
melakukan push sebanyak 4 kali, nialai yang di inputkannya yaitu 9 8 3 5, kemudian
melakukan pop sebanyak 2 kali sehingga hasilnya menjadi 9 8. Karena pada
tumpukan ini nilai yang terakhir di inputkan dan setelah melakukan pop maka
nilai yang terakhir di inputkan tersebut yang pertama di eksekusi, sehingga
nilai yang terakhir di inputkan tersebut hilang atau di hapus.
2. Buat program yang
sejenis untuk Queue / antrian.
# include
<iostream.h>
# include
<conio.h>
class
Linked_list_Queue
{
private:
struct node {
int data;
node *next;
};
node *rear;
node *entry;
node *print;
node *front;
public:
Linked_list_Queue( );
void Delete( );
void Insert( );
void print_list( );
void show_working( );
};
Linked_list_Queue::Linked_list_Queue
( )
{
rear=NULL;
front=NULL;
}
void
Linked_list_Queue::Insert( )
{
int num;
cout<<"\n\n\n\n\n\t Masukkan
angka dalam Queue : ";
cin>>num;
entry=new node;
if(rear==NULL)
{
entry->data=num;
entry->next=NULL;
rear=entry;
front=rear;
}
else
{
entry->data=num;
entry->next=NULL;
rear->next=entry;
rear=entry;
}
cout<<"\n\n\t ***
"<<num<<" sudah masuk dalam Queue."<<endl;
cout<<"\n\n\n\t\t Pres any
key to return to Menu. ";
getch( );
}
void
Linked_list_Queue::Delete( )
{
if(front==NULL)
cout<<"\n\n\n\t
*** Error : Queue is empty.
\n"<<endl;
else
{
int deleted_element=front->data;
node *temp;
temp=front;
front=front->next;
delete temp;
cout<<"\n\n\n\t ***
"<<deleted_element<<" dihapus dari
Queue."<<endl;
}
cout<<"\n\n\n\t\t Pres any
key to return to Menu. ";
getch( );
}
void
Linked_list_Queue::print_list( )
{
print=front;
if(print!=NULL)
cout<<"\n\n\n\n\n\t
Angka-angka yang ada dalam Queue adalah : \n"<<endl;
else
cout<<"\n\n\n\n\n\t ***
Tidak ada yang ditampilkan. "<<endl;
while(print!=NULL)
{
cout<<"\t
"<<print->data<<endl;
print=print->next;
}
cout<<"\n\n\n\t\t Pres any
key to return to Menu. ";
getch( );
}
void
Linked_list_Queue ::show_working( )
{
char Key=NULL;
do
{
clrscr( );
gotoxy(5,5);
gotoxy(10,8);
cout<<"Pilih salah satu
menu :"<<endl;
gotoxy(15,10);
cout<<"- Press \'I\' to
Masukkan data dalam Queue"<<endl;
gotoxy(15,12);
cout<<"- Press \'D\' to
Hapus data dari Queue"<<endl;
gotoxy(15,14);
cout<<"- Press \'P\' to
Tampilkan data dari Queue"<<endl;
gotoxy(15,16);
cout<<"- Press \'E\' to
Exit"<<endl;
Input:
gotoxy(10,20);
cout<<" ";
gotoxy(10,20);
cout<<"Masukkan Pilihan
: ";
Key=getche( );
if(int(Key)==27 || Key=='e' ||
Key=='E')
break;
else if(Key=='i' || Key=='I')
Insert( );
else if(Key=='d' || Key=='D')
Delete( );
else if(Key=='p' || Key=='P')
print_list( );
else
goto Input;
}
while(1);
}
int main(
)
{
Linked_list_Queue obj;
obj.show_working( );
return 0;
}
|
Tampilan
pada layar
Tampilan
menu
Hasil
proses memasukan data dalam queue
Proses
penghapusan data dari queue
Hasil
setelah melakukan penghapusan dari queue
Analisa
:
Program di atas merupakan
program queue atau antrian. Pada program di atas sintaksnya beda dengan program
sebelumnya, akan tetapi fungsinya sama. Dalam program di atas terdapat pilihan
menu masukan data dalam queue, hapus data dari queue, tampilkan data dari queue
dan exit. Pada program di atas terdapat 5 kali inputan dengan nilai 1 2 3 4 5,
kemudian melakukan penghapusan sehingga hasilnya menjadi 3 4 5, karena pada
queue ini nilai yang pertama di inputkan maka akan pertama di hapus, sehingga
hasilnya seperti pada contoh di atas.
CONTOH
:
Program
stack yang mempunyai fungsi proses PUSH dan proses POP terpisah dan stack dideklarasikan
dengan struct.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct tumpukan
{
char data;
tumpukan*next;
};
tumpukan*atas;
tumpukan*bawah;
tumpukan*baru;
tumpukan*hapus;
tumpukan*bantu;
void push()
{
baru=new tumpukan;
fflush(stdin);
printf("Data yg ingin dimasukkan -> ");
scanf("%c",&baru->data);
baru->next=NULL;
if(atas==NULL)
{
atas=baru;
bawah=baru;
}
else
{
baru->next=atas;
atas=baru;
}
}
void pop()
{
if(atas!=NULL)
{
if(atas==bawah)
{
delete atas;
atas=NULL;
}
else
{
hapus=atas;
atas=atas->next;
delete hapus;
}
}
else
{
printf("tumpukan kosong\nTekan enter untuk
melanjutkan...");
getch();
}
}
void show()
{
bantu=atas;
while(bantu!=NULL)
{
printf("| %c |\n",bantu->data);
bantu=bantu->next;
}
printf("\ntekan enter untuk melanjutkan...\n");
getch();
}
void main()
{
clrscr();
int pil;
do
{
clrscr();
printf("program tumpukan\n");
printf("==================\n");
printf("1.push\n");
printf("2.pop\n");
printf("3.tampil\n");
printf("4.keluar\n");
printf("Masukkan pilihan :
");scanf("%i",&pil);
switch(pil)
{
case 1:
push();
break;
case 2:
pop();
break;
case 3:
show();
break;
}
}
while(pil!=4);
}
|
Tampilan
pada layar
Melakukan
push
Setelah
melakukan pop
Analisa
:
Program
di atas merupakan program stack yang mempunyai fungsi proses PUSH dan proses
POP terpisah dan stack dideklarasikan dengan struct dengan fungsi tumpukan.
Dalam program di atas terdapat menu pilihan diantaranya push, pop, tampil dan
keluar. Contoh program di atas melakukan push diantaranya menginputkan 2 3 4 1
0, kemudian melakukan pop, pada program
tumpukan ini nilai yang terakhir di inputkan maka nilai tersebut yang di
eksekusi sehingga seperti pada contoh program di atas melakukan 2 kali pop
sehingga hasilnya menjadi 2 3 4 karena 1 dan 0 nya di hapus.
SOAL LATIHAN
1. Program
queue dengan memakai struct
#include <stdio.h>
#include <conio.h>
#define MAX 6
typedef struct
{
int data [MAX];
int head;
int tail;
}
Queue;
Queue antrian;
void Create()
{
antrian.head=antrian.tail=-1;
}
int IsEmpty()
{
if(antrian.tail==-1)
return 1;
else
return 0;
}
int IsFull()
{
if(antrian.tail==MAX-1)
return 1;
else
return 0;
}
void Enqueue(int data)
{
if(IsEmpty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
printf("%d masuk
!",antrian.data[antrian.tail]);
void Tampil();
{
if(IsEmpty()==0)
{
for(int
i=antrian.head;i<=antrian.tail;i++)
{
printf("%d
",antrian.data[i]);
}
}
else
printf("Data Kosong !\n");
}
}
else
if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data;
printf("%d masuk !",
antrian.data[antrian.tail]);
}
}
int Dequeue()
{
int i;
int
e=antrian.data[antrian.head];
for(i=antrian.head;i<=antrian.tail-1;i++)
{
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return e;
}
void Clear()
{
antrian.head=antrian.tail=-1;
printf("Data
Clear");
}
void Tampil()
{
if (IsEmpty()==0)
{
for (int
i=antrian.head;i<=antrian.tail; i++)
{ printf("%d
",antrian.data[i]);
}
}
else
{
printf("Data
Kosong\n");
}
}
void main()
{
int pil;
int data;
Create();
do
{
clrscr();
printf ("\n MENU
PILIHAN PROGRAM QUEUE\n");
printf ("1.
Enqueue\n");
printf ("2.
Dequeue\n");
printf ("3.
Tampil\n");
printf ("4.
Clear\n");
printf ("5.
Keluar\n");
printf ("Masukkan
Pilihan Anda : ");
scanf("%d",&pil);
switch(pil){
case 1:
printf("Data :
");
scanf("%d",&data);
Enqueue(data);
break;
case 2:
printf("Elemen yang
keluar : %d", Dequeue());
break;
case 3:
Tampil();
break;
case 4:
Clear();
break;
case 5:
break;
}
getch();
} while(pil!=5);
}
|
Tampilan pada layar
Insert antrian queue
Delete antrian queue
Hasil setelah di delete
Analisa :
Program di atas merupakan program queue dengan
menggunakan struck dalam sintaksnya. Program ini tidakbeda dengan program
sebelumnya dimana dalam program tersebuat ada menu pilihan diantaranya insert
antrian queue, delete antrian queue, display antrian dan exit. dalam contoh program
di atas user menginputkan 4 kali insert antrian queue dan 2 kali delete antrian
queue. Yang di inputkan yaitu 9 8 3 2 kemudian di delete menjadi 2 3, karena
pada program queue ini inputan pertama yang di inputkan dialah yang pertama
kali di eksekusi, sehinghga hasilnya menjadi 2 dan 3.
2. Program
untuk memindahkan piringan.
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
void Hanoi(int n,char asal,char bantu,char tujuan) //
pindahkan piringan ke n
{ // dari asal menuju tujuan
// melalui bantu
if (n == 0) return;
Hanoi(n-1,asal,tujuan,bantu); //pindahkan piringan ke n-1
// dari asal ke bantu melalui
//tonggak tujuan
printf("Pindahkan piringan ke %d ke dari %c ke
%c\n",n,asal,tujuan);
Hanoi(n-1,bantu,asal,tujuan); //pindahkan piringan ke n – 1
// dari bantu menuju tujuan
// melalu asal
}
int main(void)
{
int n;
printf("Jumlah piringan ? ");
scanf("%d",&n);
Hanoi(n,'a','b','c');
return 0;
}
|
Tampilan pada layar
Analisa :
Program di atas digunakan untuk memindahkan piringan,
dimana dalam memindahkan piringan
tersebut setiap kalinya hanya satu piringan yang boleh di pindahkan,
tetapi tidak
ada piringan besar di atas piringan kecil dan tiang c nerupakan perantaranya,
untukm lebih jelasnya lagi bisa di lihat pada contoh di atas.
Langganan:
Postingan (Atom)