|
1. Készítsünk egy egyszeresen
láncolt lista
programmodult. A modul tesztelésére
állományban levő karakterláncokkal
töltsünk fel egy listát, majd adott
karakterláncokat töröljünk a
listából. Az új elemet mindig az aktuális
elem után szúrjuk be. A törlendő elem pedig
mindig az aktuális
utáni elem legyen.
Az alábbi forráskód egész
számokat szúr be egy
egyszeresen láncolt lista végére, majd
kiírja a lista tartalmát:
1. módszer (egyszerűbb verzió, csak egy
struktúrával
dolgozunk)
#include <stdio.h>
#include <stdlib.h>
struct item{
int number;
struct item *next;
};
typedef struct item * ITEM;
ITEM insertAfter(ITEM act, ITEM elem);
ITEM createItem( int key);
void destroy (ITEM act);
int main()
{
ITEM elem, head, act;
int tomb [] = {1, 2, 3, 4, 5, 6};
int i, e;
head = act = NULL;
for (i = 0; i < 6; i++)
{
elem = createItem (tomb[i]);
act = insertAfter (act,
elem);
if(head == NULL) head = act;
}
printf("\n\n");
act = head;
while( act!= NULL )
{
e = act->number;
printf("%i ",e);
act = act->next;
}
printf("\n\n");
destroy (act);
return 1;
}
void destroy (ITEM act){
ITEM elem;
while (act != NULL){
elem = act;
act = act -> next;
free (elem);
}
}
ITEM insertAfter(ITEM act, ITEM elem){
if (act == NULL){
act = elem;
}
else {
act -> next = elem;
act = elem;
}
return act;
}
ITEM createItem( int key){
ITEM elem = (ITEM) malloc( sizeof( struct item));
elem->number = key;
elem->next= NULL;
return elem;
}
2. módszer (a lista fej és aktuális
elemeinek a
kezelésére két struct típussal dolgozunk
#include <stdio.h>
#include <stdlib.h>
struct item{
int number;
struct item *next;
};
struct list{
struct item *head, *act;
int size;
};
typedef struct item * ITEM;
typedef struct list * LIST;
ITEM createItem( int key); // egy elem helyfoglalása
LIST create(); //a lista helyfoglalas
void destroy( LIST ); // a lista felszabadtása;
void insertAfter(LIST
L, ITEM elem); //beszúras az akutuális mögé,
ez nincs
megírva!!!
int getValue(LIST L); //az aktuális elem
kulcsértékének lekérdezése
int isLast(LIST L); //az aktuális elem utolsó-e a
listában
int setFirst(LIST L); // az aktuális elemet "fej"-nek
állítjuk
void next(LIST L); //az aktuális elem, következő elemre
való állítása
int main()
{
LIST L;
ITEM elem;
int tomb[4] = {1,2,3,4};
int i, e;
L = create();
for(i=0; i<4; ++i)
{
elem = createItem(tomb[i]);
insertAfter(L, elem);
}
printf("\n\n");
setFirst(L);
while(!isLast(L))
{
e = getValue(L);
printf("%i ",e);
next(L);
}
printf("\n\n");
destroy (L);
return 1;
}
void next(LIST L){
L->act=L->act->next;
}
int getValue(LIST L){
return L->act->number;
}
int isLast(LIST L){
if(L->act == NULL) return 1;
else return 0;
}
int setFirst(LIST L){
L->act = L->head;
return 1;
}
ITEM createItem( int key){
ITEM elem = (ITEM) malloc( sizeof( struct
item));
elem->number = key;
elem->next= NULL;
return elem;
}
LIST create()
{
LIST L;
L=(LIST)malloc(sizeof(struct list));
L->head = L->act = NULL;
L->size = 0;
return L;
}
void destroy( LIST L){
ITEM elem;
while( L->head != NULL ){
elem = L->head;
L->head =
L->head->next;
free( elem );
}
}
|