Implementacija stoga pomoću polja

Slides:



Advertisements
Similar presentations
Senem Kumova Metin Spring2009 STACKS AND QUEUES Chapter 10 in A Book on C.
Advertisements

1/27 Pokazivači i nizovi. 2/ Pokazivači i adrese unarni operatori: & (adresa) * (posredni pristup) p =
1 Lekcija 6 - Nizovi Pregled 6.1Uvod 6.2Nizovi 6.3Deklaracija niza 6.4Primjeri upotrebe nizova 6.5Nizovi kao argumenti funkcije 6.6Sortiranje niza 6.7Primjer:
Skupovi. 2 Općeniti skup n matematički model koji se često pojavljuje u algoritmima n skup je zbirka podataka istog tipa (elemenata) n svi elementi moraju.
Obrazac JOPPD - uvod MINISTARSTVO RADA I MIROVINSKOGA SUSTAVA.
Functions, Part 2 of 2 Topics Functions That Return a Value
Number guessing game Pick a random number between 1 and 10
Zadatak 2. a) Kreirajmo tabelu TRANSAKCIJE koja će pamtiti sve transakcije obavljene na računima korisnika CREATE TABLE `test`.`transakcije` ( `id` INTEGER.
ASPECT RATIO PAŠIĆ ANELA.
1.6. Pohrana podataka.
Pretraživanje interneta
Petlje WHILE – WEND.
Java Hello world !.
Nadgradnja klasa i nasljeđivanje – 3
Programi,Podaci,Varijable,Računanje- Uvod
Programiranje - Blokovi naredbi i logički tipovi –
OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU
CheckBox RadioButton RadioGroup
Liste.
Upitni jezik SQL.
Quick Basic.
Petlje FOR - NEXT.
Programi,Podaci,Varijable,Računanje - 2
KREIRANJE OBJEKATA.
Microsoft Forms i Office Planner
RAZGRANATA STRUKTURA Zadaci i rešenja
RAZGRANATA STRUKTURA Zadaci i rešenja
Arrays and strings -2 (nizovi i znakovni nizovi)
Reference ćelije i opsega
LABORATORIJSKA VEŽBA VEŽBA 4
Binarne datoteke u Pascalu
14 UNUTRAŠNJE I ANONIMNE KLASE
Elementi programskog jezika PASCAL
Arrays and strings -1 (nizovi i znakovni nizovi)
Struktura MAC adrese i Ethernet okvira
M-datoteke.
InputBox i naredba IF.
MessageBox.
(カックロ ) Ivo Ivanišević Ena Melvan
Ključne reči,identifikatori, konstante i promenljive
Fizičke strukture podataka i pristupne metode: indeksiranje
Internet FTP usluga.
1.6. Pohrana podataka.
PROGRAMSKI JEZIK PASCAL
Visual Basic – Prvi primjer
ELEKTRONIČKA POŠTA ( ) OTVARANJE RAČUNA.
6. Apstraktne tipovi podatka
Osnovni simboli jezika Pascal
Do While ... Loop struktura
MagistralA (bus) Milan Milovanovic I6.
Računarski praktikum 3 Vježbe 01
Objektno-orijentirano programiranje
Assignment Operators Topics Increment and Decrement Operators
Programiranje - Uvod - Kolegij: Programski jezik C++
Programiranje za Internet
Strukture podataka i algoritmi 5. VRIJEME IZVRŠAVANJA ALGORITMA
Python „Technology and social media have brought power back to the people” Mark McKinnon.
Fakultet elektrotehnike i računarstva
Naredbe u php-u.
Programski jezik Python
Vježbanje.
Programski jezik C++ - Vježbe - 1. dio
Vježbanje.
predavanja v.as.mr. Samir Lemeš
Ponavljanje Pisana provjera
Vježbanje.
SQL (Structure Query Langugage) za microsoft access
Vježbenica 2: struktura grananja – 2.dio
Zadaci U memoriji oblikovati linearnu listu (pomoću pokazivača). U pojedini čvor liste upisati: - matični broj studenta (int) - ime i prezime (30+1 znakova)
Programski jezik C++ - Vježbe - 2. dio
Presentation transcript:

Implementacija stoga pomoću polja Na predavanjima je uveden apstraktni tip podataka stog i napravljen C pseudokod za jednu njegovu varijantu. Napisati funkcije koje obavljaju zadane operacije na stogu upotrebom polja za primjer s predavanja. #include <stdio.h> #include <stdlib.h> #define MAXLENGTH 4 typedef int elementtype; typedef struct stack * stackptr; typedef struct stack STACK; void MakeNull(stackptr s); int Empty(stackptr s); void Push(elementtype x, stackptr s); void Pop(stackptr s); elementtype Top(stackptr s); void PrintErrorAndTerminate(char errormsg[]);

struct stack { int top; elementtype elements[MAXLENGTH]; }; void MakeNull(stackptr s) { s->top = MAXLENGTH; } int Empty(stackptr s) { if (s->top == MAXLENGTH) return 1; else return 0; void Push(elementtype x, stackptr s) { if (s->top == 0) PrintErrorAndTerminate("Push: Stack je pun!"); s->elements[--s->top] = x;

void Pop(stackptr s){ if (Empty(s)) PrintErrorAndTerminate("Pop: Stack je prazan!"); else s->top++; } elementtype Top(stackptr s) { PrintErrorAndTerminate("Top: Stack je prazan!"); return(s->elements[s->top]); void PrintErrorAndTerminate(char errormsg[]){ printf("%s\n", errormsg); exit(-1);

int main(){ STACK s; MakeNull(&s); Push(1, &s); Push(2, &s); printf("%d\n", Top(&s)); Pop(&s); Push(5, &s); return 0; }

Još jedan primjer stoga ostvarenog poljem Stog duljine 6 elemenata se puni generiranim slučajnim brojem ako je on neparan, ukoliko je generiran parni broj, vrh stoga se skine. Ispisati sadržaj stoga nakon svakog koraka te upozoriti ukoliko je stog prazan ili pun. #include <stdio.h> #include <stdlib.h> #include <time.h> #include <ctype.h> #define MAXSTOG 6 int dodaj (int stavka, int stog[], int n, int *vrh) { if (*vrh >= n-1) return 0; (*vrh)++; // ne pisati *vrh++; ! stog[*vrh] = stavka; return 1; }

int skini (int *stavka, int Stog[], int *vrh) { if (*vrh < 0) return 0; *stavka = Stog[*vrh]; (*vrh)--; return 1; } void main (void) { int novi, stari, stog [MAXSTOG]; int vrh,i,ch; vrh = -1; // prazan stog printf (“Generiraju se slucajni nenegativni cijeli brojevi.\n"); printf ("Neparni brojevi upisuju se na stog\n"); printf ("Parni broj znaci skidanje sa stoga\n"); printf ("Za obavljanje jednog koraka pritisnuti ENTER, za kraj bilo koji znak\n\n"); srand ((unsigned) time (NULL)); while (isspace(getchar())) { if (vrh == -1) { printf("prazan stog");

else { printf ("Stog:"); for (i=0; i <= vrh; ++i) printf (" %d", stog[i]); } putchar ('\n'); novi = rand (); if (novi%2) { // Neparni se upisuju na stog printf ("Dodaj %d\n", novi); if (!dodaj (novi, stog, MAXSTOG, &vrh)) printf("Stog je pun!\n"); } else { // Parni broj znaci skidanje sa stoga printf ("Skini..."); if (skini (&stari, stog, &vrh)) { printf ("Skinut %d\n", stari); } else { printf("Stog je prazan!\n"); exit(0);

Implementacija stoga pomoću pokazivača Napisati program za realizaciju stoga pomoću pokazivača: iz ulazne datoteke se čitaju podaci i upisuju u stog. Ispisati vrijednosti elemenata u stogu i lokacije na kojima se nalaze. Nakon toga skidati podatke iz stoga sve dok ne ostane prazan. #include <stdio.h> #include <malloc.h> typedef int tip; struct cv { tip element; struct cv *sljed; }; typedef struct cv cvor; cvor *dodaj (cvor *vrh, tip element) { cvor *novi; if ((novi = (cvor *) malloc(sizeof(cvor))) != NULL) { novi->element = element; novi->sljed = vrh; printf("Na adresu %p dodao sam %d, a sljedeci je %p\n",novi, element, vrh); } return novi; // vrati pokazivac na novi cvor

cvor *skini (cvor *vrh, int *element) { cvor *pom; *element = vrh->element; printf ("S adrese %p ", vrh); pom = vrh->sljed; free (vrh); // oslobodi vrh return pom; // vrati novi vrh } void main (void) { FILE *fi; int j; int element; // element stoga cvor *vrh, *p;// pokazivac na vrh i pomocni pokazivac fi = fopen ("UlazZaStog.txt", "r"); if (fi) { vrh = NULL; j = 0; while (fscanf (fi, "%d", &element) != EOF) { j++; if ((p = dodaj (vrh, element)) != NULL) { vrh = p; printf ("%d. ulazni podatak je %d\n", j, vrh->element);

else { printf("Nema vise mjesta za stog\n"); break; } fclose (fi); p = vrh; // Skidanje elemenata sa stoga while (vrh) { vrh = skini (vrh, &element); printf ("skinuo sam element %d\n", element); printf ("Nema ulazne datoteke\n"); exit (1);

Zadaci 1) Napisati funkcije za dodavanje i skidanje elementa u stog realiziran poljem u koje stane najviše MAXZ zapisa. U glavnom programu izvesti učitavanje podataka za element stoga s tastature kao i ispisivanje elementa stoga koji je skinut (npr. unijeti nekoliko elemenata u stog, a zatim skinuti i ispisati svaki element sve dok stog ne ostane prazan). Element stoga je zapis o položenom ispitu studenta: matični broj (long) ime i prezime (24+1 znak) sifra predmeta (int) ocjena (short) 2) U memoriji oblikovati linearnu listu (pomoću pokazivača). U pojedini čvor liste upisati: matični broj studenta (int) ime i prezime (30+1 znakova) ocjena (int) pokazivač na sljedeći čvor Napisati funkciju koja će iz liste ispisati sve zapise koji sadrže određenu ocjenu (samo 2, 3, 4 ili 5).

3) Napisati funkciju za oblikovanje linearne jednostuko povezane liste (pokazivači) u koju su upisani: šifra artika (cijeli broj) i naziv artikla (15+1 znakova). Lista je poredana po šifri artikala. Napisati funkciju za pronalaženje i ispis člana liste sa zadanom šifrom artikla. Ulazni argumenti su glava liste i šifra artikla, a izlazni argument je naziv artikla. Funkcija vraća rezultat 0 ako šifra nije nađena, a 1 ako jest.