#include <cstdlib>
#include <iostream>
#define maks 5
using namespace std;
class Stack{
friend ostream& operator<<(ostream&, const Stack&);
public:
Stack();
int penuh(int);
int kosong(int);
void cetak();
void push(char);
char pop();
private:
char A[maks];
int banyak;
};
ostream& operator<<(ostream& out, const Stack& s)
{
cout << “\nIsi stack : “;
for (int i=0;i< s.banyak;i++)
out << s.A[i] << ” “;
}
Stack::Stack(){
banyak = 0;
for (int i=0; i<maks; i++)
A[i] = ’0′;
}
int Stack::penuh(int s)
{
return s == maks ? 1 : 0;
}
int Stack::kosong(int s)
{
return s == 0 ? 1 : 0;
}
void Stack::cetak()
{
cout << “\nIsi stack :”;
for (int i=0;i< banyak;i++)
cout << A[i] << ” “;
}
void Stack::push(char x)
{
cout << “\nElemen masuk :” << x;
if (penuh(banyak)) cout << “Stack penuh”;
else if (A[0]==’0′){
A[0] = x;
banyak++; }
else {
for (int i=banyak; i>=0; i–)
A[i+1] = A[i];
A[0] = x;
banyak++; }
}
char Stack::pop()
{
cout <<”\nPop stack, elemen yang di-pop :” << A[0];
char temp=A[0];
for (int i=0;i<banyak; i++) A[i] = A[i+1];
A[banyak]= ’0′;
banyak–;
return temp;
}
int main(int argc, char *argv[])
{
Stack stack;
for (char c=’a'; c<’d'; c++){
stack.push(c);
stack.cetak();
}
char p = stack.pop();
stack.cetak();
cout << “\n\nCetak pakai overloading : ” << stack;
system(“PAUSE”);
return EXIT_SUCCESS;
}
#include <cstdlib>
#include <iostream>
using namespace std;
class node{
friend class list;
friend ostream& operator<<(ostream&, const list&);
public:
node(char &t,node *p):info(t),berikut(p){}
protected:
char info;
node *berikut;
};
class list{
friend ostream& operator<<(ostream&,const list&);
public:
list():kepala(0){}
~list();
void sisip(char t);
int hapus(char& t);
int hapusbelakang(char& t);
int kosong(){return(kepala==0);}
void cetak();
protected:
node *kepala;
node *nodebaru(char& t, node*p){
node *q=new node(t,p);return q;}
};
ostream& operator<<(ostream& out, const list& k){
for(node* p=k.kepala;p;p=p->berikut)
out<<p->info<<” ->”;
out<<”*\n”;
return out;
}
list::~list(){
node* temp;
for(node* p=kepala;p;){
temp=p;
p=p->berikut;
delete temp;
}
}
void list::sisip(char t){
cout<<t<<” masuk list : “;
node *p=nodebaru(t,kepala);
kepala=p;
}
int list::hapus(char& t){
if(kosong())return 0;//penghapusan gagal
t=kepala->info;
node* p=kepala;
kepala=kepala->berikut;
cout<<t<<endl;
delete p;
return 1;//penghapusan sukses
}
int list::hapusbelakang(char& t){
if(kosong())return 0;//penghapusan gagal
t=kepala->info;
node*p=kepala;
kepala=kepala->berikut;
delete p;
return 1;//penghapusan sukses
}
void list::cetak(){
for(node* p=kepala;p;p=p->berikut)
cout<<p->info<<” ->”;
cout<<”*\n”;
}
int main(int argc, char *argv[])
{
list x;
char data;
x.sisip(‘a’);
cout<<x;
x.sisip(‘b’);
cout<<x;
x.sisip(‘c’);
cout<<x;
x.sisip(‘d’);
cout<<x;
for(int i=0;i<5;i++){
x.hapus(data);
cout<<data<<” dihapus dari list: “;
cout<<x;
}
system(“PAUSE”);
return EXIT_SUCCESS;
}