Mazurkiewicz Rafał
Projekt nr 3
Temat: Wstawianie elementów na listę dwukierunkową.
Po uruchomieniu program ten wyświetla swój nagłówek, a następnie udostępnia kilka opcji: dodanie nowego elementu, wyświetleni wszystkich elementów, informacja o sposobie wprowadzania nowych elementów oraz wyjście z programu. Opcja dodania nowego elementu umożliwia wprowadzenie na listę kolejnego nazwiska, opcja wyświetlania wypisuje wszystkie wprowadzone elementy. Wybranie opcji informacji o wprowadzaniu nowych elementów powoduje wypisanie tychże informacji wraz z rysunkiem.
Listing
plik - „listad.c”
#include <stdio.h>
#include "naglowek.h"
#include "funkcje.c"
void main(void)
{
char ch;
printf("\n\n\tProjekt nr 3\n\tautor: Mazurkiewicz Rafal\n");
while (TRUE)
{
printf("\n Wybierz:\n\t'n'- wprowadzenie nowego elementu");
printf("\n\t'w' wyswietlenie wszystkich elementow");
printf("\n\t'i' informacja o wprowadzaniu elementow");
printf("\n\t'q' wyjscie\n : ");
ch = getc(stdin);
fflush(stdin);
switch(ch)
{
case 'n':
dodaj_nowy(); break;
case 'w':
wyswietl_liste(); break;
case 'i':
informacja();break;
case 'q':
zwolnienie_pamieci(); break;
default:
puts("\nBledna dana wejsciowa");
}
}
}
plik - „funkcje.c”
#include <stdlib.h>
#include <stdio.h>
#include "naglowek.h"
#include "infor.c"
void dodaj_nowy(void)
{
struct element *nowy;
nowy = malloc( sizeof(struct element) );
if (nowy==NULL)
{
printf("Blad alokacji pamieci ");
return;
}
nowy->nastepny = pierwszy;
nowy->poprzedni = NULL;
if (pierwszy != NULL)
pierwszy->poprzedni = nowy;
pierwszy = nowy;
printf("\nPodaj nazwisko: ");
gets(nowy->nazwisko);
}
void wyswietl_liste(void)
{
struct element *tutaj;
int a=1;
if (pierwszy == NULL )
{
printf("\nPusta lista.\n");
return;
}
tutaj = pierwszy;
do
{
printf("\nNazwisko nr%d: %s\n",a, tutaj->nazwisko );
a++;
tutaj = tutaj->nastepny;
}
while(tutaj != NULL);
}
void zwolnienie_pamieci(void)
{
struct element *tutaj, *zwolnij;
if (pierwszy == NULL )
exit(0);
tutaj = pierwszy;
do
{
zwolnij = tutaj;
tutaj = tutaj->nastepny;
free(zwolnij);
}
while(tutaj != NULL);
exit(0);
}
void informacja(void)
{
int b;
for (b=0;b<21;b++)
printf("%s\n",tab[b]);
printf("\nNacisnij ENTER ...");
fflush(stdin);
b=getchar();
}
plik - „naglowek.h”
#ifndef naglowek_h
#define naglowek_h
void dodaj_nowy(void);
void wyswietl_liste(void);
void zwolnienie_pamieci(void);
void informacja(void);
#define TRUE 1
struct element
{
char nazwisko[30];
struct element *nastepny;
struct element *poprzedni;
};
struct element *pierwszy = NULL;
#endif
plik - „infor.c”
char tab [21][70]={" Dodawanie nowego elementu na liste dwukierunkowa. ",
" Aby dodac element na liste dwukierunkowa nalezy najpierw zarezer- ",
"wowac dla tego elementu pamiec. Potem nalezy w elemencie pierwszym ",
"w skladowej 'poprzedni' wstawic adres nowego, do elementu nowy w pole",
"'poprzedni' wprowadzic 'NULL', a w pole 'nastepny' adres elementu ",
"pierwszego ",
" .-----------. .-----------. .-----------. ",
" | | | nazwisko |<-. .->| nazwisko | ",
" |-----------| |-----------| | | |-----------| ",
" | | | nastepny |--|--' | NULL | ",
" |-----------| |-----------| | |-----------| ",
" | | | NULL | `-----| poprzedni | ",
" `-----------' `-----------' `-----------' ",
" nowy pierwszy drugi ",
" .-----------. .-----------. .-----------. ",
" | nazwisko |<-. .->| nazwisko |<-. .->| nazwisko3 | ",
" |-----------| | | |-----------| | | |-----------| ",
" | nastepny |--|--' | nastepny |--|--' | NULL | ",
" |-----------| | |-----------| | |-----------| ",
" | NULL | `-----| poprzedni | `-----| poprzedni | ",
" `-----------' `-----------' `-----------' "};