Rajzoljunk a konzol ablakba Windowson
Töltsd le a minima*LISTA* és *FA* kezelő programot: lista_fa.zip
Értsd meg a listás programot.
Egészítsd ki az alábbi értékeket visszaadó függvényekkel:
Elemszám.
Értékek összege.
A programban írd ki az elemek átlagát.
Értsd meg a fás programot.
Egészítsd ki az alábbi értékeket visszaadó függvényekkel:
Elemszám.
Értékek összege.
Levél elemek száma. (Levél elem: egyetlen leszármazottja sincs.)
A programban írd ki az elemek átlagát, valamint a levelek számát.
Vedd elő újra a listás programot, egészítsd ki egy mindig a lista elejére beszúró függvénnyel.
Építs ezzel egy pár elemű listát, de ne véletlen értékekkel. Írd ki a listát. Mit tapasztalsz?
| 1. feladat |
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct _lista {
int d;
struct _lista* n;
} lista;
void listabeszur(lista**, int);
void listakiir(lista*);
void listatorol(lista*);
int elemszam(const lista* plist) {
int db = 0;
for (; plist != NULL; plist = plist->n)
db++;
return db;
}
double elemosszeg(const lista* plist) {
double sum = 0;
for (; plist != NULL; plist = plist->n)
sum += plist->d;
return sum;
}
int main()
{
int i;
lista* head = NULL;
srand(time(0));
for (i = 0; i < 20; ++i)
listabeszur(&head, rand());
listakiir(head);
listabeszur(&head, 8888);
listakiir(head);
printf("Atlag = %g\n", elemosszeg(head) / elemszam(head));
listatorol(head);
head = NULL;
return 0;
}
void listabeszur(lista** h, int v)
{
lista* curr, * prev, * newe;
curr = prev = *h;
newe = (lista*)malloc(sizeof(lista));
newe->d = v;
while (curr != NULL && curr->d < v) {
prev = curr;
curr = curr->n;
}
newe->n = curr;
if (curr == prev)
* h = newe;
else
prev->n = newe;
}
void listakiir(lista* h)
{
while (h != NULL) {
printf("%d\t", h->d);
h = h->n;
}
printf("\n");
}
void listatorol(lista* h)
{
lista* tmp;
while (h != NULL) {
tmp = h;
h = h->n;
free(tmp);
}
}
|
| 2. feladat |
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct _bifa {
int d;
struct _bifa* b, * j;
} bifa;
void fabeszur(bifa**, int);
void fakiir(bifa*);
void fatorol(bifa*);
int famelyseg(bifa*);
int elemszam(const bifa* pfa) {
if (pfa == NULL)
return 0;
return elemszam(pfa->b) + elemszam(pfa->j) + 1;
}
double elemosszeg(const bifa* pfa) {
if (pfa == NULL)
return 0;
return elemosszeg(pfa->b) + elemosszeg(pfa->j) + pfa->d;
}
int levelszam(const bifa* pfa) {
if (pfa == NULL)
return 0;
return (pfa->b == NULL && pfa->j == NULL) ? 1 : (levelszam(pfa->b) + levelszam(pfa->j));
}
int main()
{
int i;
bifa* root = NULL;
srand(time(0));
for (i = 0; i < 200; ++i)
fabeszur(&root, rand());
printf("A fa melysege %d\n", famelyseg(root));
fakiir(root);
printf("\n\nAtlag = %g\n", elemosszeg(root) / elemszam(root));
printf("Levelszam = %d\n", levelszam(root));
fatorol(root);
root = NULL;
return 0;
}
void fabeszur(bifa** r, int v)
{
if (*r != NULL) {
if (v < (*r)->d)
fabeszur(&((*r)->b), v);
else if (v > (*r)->d)
fabeszur(&((*r)->j), v);
else
; /* nincs duplikalt elem */
}
else {
*r = (bifa*)malloc(sizeof(bifa));
(*r)->d = v;
(*r)->b = (*r)->j = NULL;
}
}
void fakiir(bifa* r)
{
if (r == NULL) return;
fakiir(r->b);
printf("%d\t", r->d);
fakiir(r->j);
}
void fatorol(bifa* r)
{
if (r == NULL) return;
fatorol(r->b);
fatorol(r->j);
free(r);
}
int famelyseg(bifa* r)
{
int a, b;
if (r == NULL) return 0;
a = famelyseg(r->b);
b = famelyseg(r->j);
return 1 + (a < b ? b : a);
}
|
| 3. feladat |
#include <stdio.h>
#include <stdlib.h>
typedef struct _lista {
int d;
struct _lista* n;
} lista;
void listakiir(lista*);
void listatorol(lista*);
void elejeretesz(lista** plista, int szam){
lista* uj = (lista*)malloc(sizeof(lista));
uj->d = szam;
uj->n = *plista;
*plista = uj;
}
int main()
{
int i;
lista* head = NULL;
for (i = 0; i < 20; ++i)
elejeretesz(&head, i);
listakiir(head);
listatorol(head);
head = NULL;
return 0;
}
void listakiir(lista* h)
{
while (h != NULL) {
printf("%d\n", h->d);
h = h->n;
}
printf("\n");
}
void listatorol(lista* h)
{
lista* tmp;
while (h != NULL) {
tmp = h;
h = h->n;
free(tmp);
}
}
|