Stack implementering i C

Stack implementering i C

Vi kan implementere datastrukturen gjennom C -språket. Det er flere typer datastruktur tilgjengelig for å lagre og få tilgang til dataene på en effektiv måte. Stack er en av dem.

En stabel er en modifisert versjon av Array. Vi kan legge til eller fjerne et element i stabelens ene ende. Denne enden er på Topp av stabelen.

Stack er en spesialisert måte å håndtere, lagre, sette inn, slette, få tilgang til dataene. Det er abstrakt i naturen.

Array og Stack

  1. Det er litt forskjell mellom matrisen og stabelen når det gjelder tilgjengeligheten deres. Vi kan få tilgang til et hvilket som helst element fra matrisen til enhver tilstand, men i tilfelle av stack kan vi sette inn eller slette elementet fra en ende en etter en. Denne enden kalles toppen. Når det gjelder tilgjengelighet, er matrisen raskere enn stabelen.
  2. Stack har to hovedfunksjoner som heter Push and Pop.
  3. Skyvfunksjonen brukes til å sette inn i en stabel, og popfunksjonen brukes til å fjerne et element fra stabelen.

Representasjon

Vi kan bare få tilgang til det siste elementet som er satt inn i Stack. Dette er toppen av stack. Vi kan enten sette inn eller fjerne fra toppen.

Dette er kjent som The Last In Fast Out (LIFO) og Fast In Last Out (Filo).

Gjennomføring

Stabel kan implementeres som følger:

-> Array -> Dynamic Array -> Link List

Operasjon

-> Push -> Pop

Algoritme Push: Push (Stack, Top, MaxStk, Vare)

1. [Stabel er full]

Hvis topp == maxstk

Vis melding: Overløp og returner

2. Sett topp = topp + 1
3. Sett stack [øverst] = element
4. Komme tilbake

Algoritme Pop: Pop (stabel, topp, vare)

1. [Element fjernet fra stabel]

Hvis topp == -1

Vis melding: Understrømning og retur

2. Sett element = Stack [TOPP]
3. Topp: Topp -1
4. Komme tilbake

Stabel med matrise

Struct arraystack

int topp;
usignert kapasitet;
int *matrise;

Her definerer vi en brukerdefinert datatype som heter ArrayStack. Den har tre datamedlemmer som heter Top, Capacity og en peker som heter *Array.

Polsk notasjon

Polsk notasjon er å skrive operatører av et uttrykk enten før eller etter deres operand.

Måter å skrive:

Infix 2. Prefiks 3. Postfix

Infix

Operatørene holdes mellom de to operandene.

Eksempel: A + B

Prefiks

Operatørene holdes før operandene deres.

Eksempel: + A B

Postfix

Operatørene holdes etter operandene.

Eksempel: A B +

Konvertere

1.

Infix:
(A + b) * c
Prefiks:
* + A B C
Postfix:
A B + C *

2.

Infix:
A + (B * C)
Prefiks:
+ A * B C
Postfix:
A B C * +

3.

Infix :( a + b) / (c - d)
Prefiks:/ + a b - c d
Postfix: A B + C D - /

All denne konverteringen kan gjøres ved hjelp av stabel. Nå vil vi vise hvordan en stabel kan opprettes og hvordan elementet eller dataene settes inn. Elementene kan fjernes fra stabelen gjennom programmering.

Programmeringseksempel

#inkludere
#inkludere
int vare;
struct arraystack // definere en datatype;

int topp;
int kapasitet;
int *matrise;
;
struct ArrayStack *CreateStack (int cap) // Lag en stabel;

struct arraystack *stack;
stack = malloc (sizeof (struct arraystack));
stack-> topp = - 1;
stack-> kapasitet = cap;
stack-> array = malloc (sizeof (int) * stack-> kapasitet);
return (stack);

int full (struct arraystack *stack) // Kontroller bunken er full eller ikke.

if (stack-> top == stack-> kapasitet-1)
return (1);
ellers
return (0);

int tom (struct arraystack *stack) // Kontroller bunken er tom eller ikke.

if (stack-> top == -1)
return (1);
ellers
return (0);

void push (struct arraystack *stack, int element) // sett inn elementer i stabelen;

hvis ( !full (stabel))

stack-> topp ++;
stack-> array [stack-> topp] = element;


int pop (struct arraystack *stack) // fjern elementer fra bunken;

hvis ( !tom (stabel))

element = stack-> array [stack-> topp];
stack-> topp--;
return (vare);

return (-1);

int main ()

int valg;
struct arraystack *stack;
Stack = CreationStack (4);
mens (1)

printf ("\ n 1 . skyv ");
printf ("\ n 2 . pop ");
printf ("\ n 3 . Avslutt \ n ");
printf ("Enter ditt valg \ n");
scanf ("%d", & valg);
bryter (valg)

Sak 1:
printf ("Skriv inn et tall \ n");
scanf (" %d", & element);
PUSH (stabel, vare);
gå i stykker ;
sak 2:
element = pop (stack);
if (element == - 1)
printf ("stabel er tom");
ellers
printf ("poppet verdi er %d", element);
gå i stykker ;
sak 3:
Avslutt (0);


retur 0;

Produksjon:

Forklaring

Som vi sa tidligere, definerer vi en brukerdefinert datatype som heter ArrayStack. Den har tre datamedlemmer som heter Top, Capacity og en peker -matrise. Deretter definerer vi en funksjon som heter CreateStack der vi passerer en verdi som den totale arrayblokken opprettes. Malloc () -funksjonen oppretter denne matrisen og returnerer adressen til variabelbunken som er arraystack -typen. Stack-> -arrayen inneholder adressen til matrisen som er opprettet av Malloc () -funksjonen.

Deretter definerer vi en annen funksjon som heter Full () for å sjekke om stabelen er full eller ikke.

Lag en annen funksjon som heter tom for å sjekke om stabelen er tom.

Deretter definerer vi en annen funksjon som heter push () der vi setter inn elementene en etter en i stabelen fra den ene enden som heter Top. For å sette inn elementet i stabelen, sjekker vi først om stabelen er full.

Deretter definerer vi en annen funksjon som heter Pop () der vi sletter elementene en etter en fra stabelen fra den ene enden som heter Top. For å fjerne elementet i stabelen, sjekker vi først om stabelen er tom.

Deretter, inne i Main () -funksjonen, skriver vi Switch -saken for å gi brukeren et menyalternativ for å velge valget sitt om elementet er satt inn eller slettet i stabelen.

Konklusjon

Fra diskusjonen om stabelen har vi kommet for å komme til denne konklusjonen at Stack er en veldefinert datastruktur som brukes til å administrere dataene på en strukturell måte. Vår dagliglivsstabel er implementert i forskjellige felt for å lagre, sette inn eller slette elementer.