RaiST
13/11/2002, 23:06
Buda basit bir stack uygulaması.
umarım bir işe yarıyordur..
stack.h
struct stack
{
float data;
struct stack *next;
};
typedef struct stack STACK;
STACK * Push(STACK * myStack,float value);
float Pop(STACK * myStack);
int isFull();
int isEmpty(STACK * myStack);
stack.c
#include <alloc.h>
#include "stack.h"
STACK * Push(STACK * myStack,float value)
{
STACK * new;
STACK * temp;
temp=myStack;
if (myStack==NULL)
{
new=(STACK*)malloc(sizeof(STACK));
new->next=NULL;
new->data=value;
myStack=new;
}
else
{
while(temp->next!=NULL)
{
temp=temp->next;
}
new=(STACK*)malloc(sizeof(STACK));
new->data=value;
new->next=NULL;
temp->next=new;
}
return myStack;
}
float Pop(STACK * myStack)
{
STACK * prev;
STACK * temp;
int val=0;
temp=myStack;
while(temp->next!=NULL & temp->next!=temp)
{
prev=temp;
temp=temp->next;
}
val=temp->data;
prev->next=NULL;
free(temp);
return val;
}
int isFull()
{
STACK * new;
if ((new=(STACK*)malloc(sizeof(STACK)))==NULL)
{
/* hafiza dolu!! */
return 1;
}
else
{
return 0;
}
}
int isEmpty(STACK * myStack)
{
if (myStack==NULL)
{
return 1;
}
else
{
return 0;
}
}
test.c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "stack.c"
/* Hseyin Uslu */
#define DEBUG_STACK 0
/* DEBUG_STACK=1 yaplrsa program her iŸlemden sonra stackin o anki halini g”sterecektir*/
void DebugStack(STACK *); /*Stack Debug fonksiyonu */
void main()
{
STACK * ourStack=NULL;
int i;
float deger;
clrscr();
for (i=1;i<=10;i++)
{
if (isFull()==0)
{
printf("%d. de§eri giriniz:",i);
scanf("%f",°er);
ourStack=Push(ourStack,deger);
}
else
{
printf("Hazfa dolu! Stack i‡in yeni yer ayrlamyor...");
getch();
exit(0);
}
}
DebugStack(ourStack);
printf("\n---------- Stack library kullanlarak avarage hesaplanyor... ----------\n");
while(ourStack->next->next!=NULL)
{
if (isEmpty(ourStack)==0)
/*stack boŸ de§ilse */
{
Push(ourStack,Pop(ourStack)+Pop(ourStack));
DebugStack(ourStack);
}
}
Push(ourStack,Pop(ourStack)+Pop(ourStack));
DebugStack(ourStack);
printf("_____________________________________________\n");
printf("Avarage=%f",Pop(ourStack)/10);
getch();
}
void DebugStack(STACK * myStack) /*Stack Debug fonksiyonu */
/*stacking o anki durumunu ekrana yazdrr */
{
STACK * temp;
if (DEBUG_STACK==1)
{
temp=myStack;
printf("[DEBUG - printing current list : ");
printf("%.1f",temp->data);
while(temp->next!=NULL & temp->next!=temp)
{
temp=temp->next;
printf("->%.1f",temp->data);
}
printf("\n");
}
}
umarım bir işe yarıyordur..
stack.h
struct stack
{
float data;
struct stack *next;
};
typedef struct stack STACK;
STACK * Push(STACK * myStack,float value);
float Pop(STACK * myStack);
int isFull();
int isEmpty(STACK * myStack);
stack.c
#include <alloc.h>
#include "stack.h"
STACK * Push(STACK * myStack,float value)
{
STACK * new;
STACK * temp;
temp=myStack;
if (myStack==NULL)
{
new=(STACK*)malloc(sizeof(STACK));
new->next=NULL;
new->data=value;
myStack=new;
}
else
{
while(temp->next!=NULL)
{
temp=temp->next;
}
new=(STACK*)malloc(sizeof(STACK));
new->data=value;
new->next=NULL;
temp->next=new;
}
return myStack;
}
float Pop(STACK * myStack)
{
STACK * prev;
STACK * temp;
int val=0;
temp=myStack;
while(temp->next!=NULL & temp->next!=temp)
{
prev=temp;
temp=temp->next;
}
val=temp->data;
prev->next=NULL;
free(temp);
return val;
}
int isFull()
{
STACK * new;
if ((new=(STACK*)malloc(sizeof(STACK)))==NULL)
{
/* hafiza dolu!! */
return 1;
}
else
{
return 0;
}
}
int isEmpty(STACK * myStack)
{
if (myStack==NULL)
{
return 1;
}
else
{
return 0;
}
}
test.c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "stack.c"
/* Hseyin Uslu */
#define DEBUG_STACK 0
/* DEBUG_STACK=1 yaplrsa program her iŸlemden sonra stackin o anki halini g”sterecektir*/
void DebugStack(STACK *); /*Stack Debug fonksiyonu */
void main()
{
STACK * ourStack=NULL;
int i;
float deger;
clrscr();
for (i=1;i<=10;i++)
{
if (isFull()==0)
{
printf("%d. de§eri giriniz:",i);
scanf("%f",°er);
ourStack=Push(ourStack,deger);
}
else
{
printf("Hazfa dolu! Stack i‡in yeni yer ayrlamyor...");
getch();
exit(0);
}
}
DebugStack(ourStack);
printf("\n---------- Stack library kullanlarak avarage hesaplanyor... ----------\n");
while(ourStack->next->next!=NULL)
{
if (isEmpty(ourStack)==0)
/*stack boŸ de§ilse */
{
Push(ourStack,Pop(ourStack)+Pop(ourStack));
DebugStack(ourStack);
}
}
Push(ourStack,Pop(ourStack)+Pop(ourStack));
DebugStack(ourStack);
printf("_____________________________________________\n");
printf("Avarage=%f",Pop(ourStack)/10);
getch();
}
void DebugStack(STACK * myStack) /*Stack Debug fonksiyonu */
/*stacking o anki durumunu ekrana yazdrr */
{
STACK * temp;
if (DEBUG_STACK==1)
{
temp=myStack;
printf("[DEBUG - printing current list : ");
printf("%.1f",temp->data);
while(temp->next!=NULL & temp->next!=temp)
{
temp=temp->next;
printf("->%.1f",temp->data);
}
printf("\n");
}
}