Dizi yerine bağlı listeleri de ayrıca kullanabiliriz.Bağlı liste belleği dinamik olarak ayırır.Dizideki gibi sadece eleman sayımızın sabit olmasına gerek yok eleman eklersek boyut artar eleman çıkartırsak boyut azalır.
Aşağıda C yorumlarla birlikte kodu verilmiştir.
#include<stdio.h>
#include<stdlib.h>struct Node {
int data;
struct Node * next;
};struct Node * top=NULL;
struct Node * temp=NULL;void push(int data){
struct Node * ptr = (struct Node * ) malloc (sizeof(struct Node));
ptr->data=data;
// eğer ki en üstte değer yok ise
if(top==NULL){
// ilk elemanımız NULL'ı gösterir
ptr->next=NULL;
// en üst elemanımız ilk eleman olmuş olur
top=ptr;
}
// eğer ki eleman var ise
else{
// en üste ekleyeceğimiz değer alt değeri gösterir
ptr->next=top;
// artık en üstteki değer ptr olur
top=ptr;
}
}void pop(){
// eğer ki hiç eleman yok ise
if(top==NULL){
printf("Stack is empty!!");
}
// tek bir eleman var ise
else if(top->next==NULL){
top=NULL;
free(top);
}
// birden fazla eleman var ise
else{
// top'tan önceki elemanı temp'e ata
temp=top->next;
// en üstteki elemanı uçur
free(top);
// en üstteki eleman artık top'tan önceki eleman olan temp değerine sahip olur.
top=temp;
}
}void listele(){
if(top==NULL){
printf("Stack is empty!!");
}else{
temp=top;
printf("\n");
while(temp->next!=NULL){
printf("%d\t",temp->data);
temp=temp->next;
}
printf("%d",temp->data);
}}
int main(){
int choice,data;
while(1){
printf("1)Eleman Ekle\n");
printf("2)Eleman Çıkar\n");
printf("Secim : \n");
scanf("%d",&choice);
switch(choice){
case 1:
printf("Data : ");
scanf("%d",&data);
push(data);
listele();
break;
case 2:
pop();
listele();
break;
}
}
return 0;
}