Liste: pile et queue en C - Applications résolues


1) Ecrire un type structure pour representation d’une liste enchaînée, intermédiaire duquel ils détiennent des valeurs de texte pour afficher un message. La liste contiendra 3 elements.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
//ecrire une structure pour representer un noeud (element) de la liste
struct nod_lista{
	char* inf;
	nod_lista* next;
};
/*construire un type propre poufr representer un noeud 
de liste sur la base de la structure précédemment définie*/
typedef struct nod_lista nod;
//fonction principale en execution
void main()
{
	nod* a; //premier element de la liste
	a=(nod*)malloc(sizeof(nod));
	a->inf="Bonjour"; //contenu du premier element

	nod* b; //deuxieme element de la liste
	b=(nod*)malloc(sizeof(nod));
	a->next=b; //suivant element du premier
	b->inf="langage";
 
	nod* c; //troixieme element de la liste
	c=(nod*)malloc(sizeof(nod));
	b->next=c;
	c->inf="C/C++!";
	c->next=NULL; //sau c->next=0;

	while(a) //a!=NULL sau a!=0
	{
		printf("%s ",a->inf);
		a=a->next;
	}
	getch();
}

2) Ecrire un type structure pour repreasenter une liste enchainee, Et par son intermede retenir des valeurs textuels pour afficher un message. Toute la reference de la liste soit faite avec un seul element.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
//ecrire une structure pour representer un noeud (element) de la liste
struct nod_lista{
	char* inf;
	nod_lista* next;
};/*modifier une valeur de la liste 
(si cette valeur a se trouve plusieurs fois, on va modifier la premiere)*/
typedef struct nod_lista nod;
//fonction principale en execution
void main()
{
	nod* a; //premier element de la liste
	a=(nod*)malloc(sizeof(nod));
	a->inf="Bonjour"; //contenu du premier element

	a->next=(nod*)malloc(sizeof(nod));
	a->next->inf="langage"; //suivant element du premier

	a->next->next=(nod*)malloc(sizeof(nod));
	a->next->next->inf="C/C++!";
	a->next->next->next=NULL;
 
	while(a) //a!=NULL sau a!=0
	{
		printf("%s ",a->inf);
		a=a->next;
	}
	getch();
}

3) Ecrire un programme pour determiner les principales operations sur une liste enchainee (asimetrique) qui contient des nombres entiers. On va cdevelopper les suivantes operations:
- generation (initialisation) d’une liste
- longueur (nombre des elements) d’une liste
- ajouter un element dans une liste
- devant la liste
- derriere la liste
- apres un element donné
- modifier la valeur d’un element de la liste
- effacer un element de la liste:
- effacer le premier element
- effacer le dernier element
- effacer un certain element
- afficher la liste
- detruire (dealocation) la liste.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

//definir un type structure pour representer un noeud de la liste
typedef struct nod{
	int val;
	nod *next;
}nod;
 
//initialisation (generer) d’une liste
nod* init(nod *cap);
 
//longueur – nombre des elements de la liste
int lung(nod *cap);
 
//ajouter un element devant une liste
nod* adFata(nod *cap, int inf);
 
//ajouter un element derriere une liste
nod* adSpate(nod *cap, int inf);
 
//ajouter un element sur une certaine position de la liste
nod* adInterior(nod *cap,int valpoz, int valnou);
 
/*modifier une valeur de la liste (si cette valeur
a se trouve plusieurs fois, on va modifier la premiere) */
nod* modify(nod *cap, int valvechi, int valnou);
 
//effacer un element devant la liste
nod* stergeFata(nod *cap);
 
//effacer un certain element de la liste
nod* stergeVal(nod *cap, int inf);
 
//effacer un element derriere la liste
nod* stergeSpate(nod *cap);
 
//afficher les components de la liste
void afisList(nod *cap);
 
//destruction (dealocation) de la liste
void destroy(nod *cap);
 
//initialiser (generer) une liste
nod* init(nod *cap)
{
	cap=NULL;
	return cap;
}
 
//longueur – nombre des elements de la liste
int lung(nod *cap)
{
	nod *aux; //element de parcourrir la liste
	int nr=0;
	aux=cap;
	while(aux!=NULL)
	{
		nr++;
		aux=aux->next;
	}
return nr;
}
 
//ajouter un element devant la liste
nod* adFata(nod *cap, int inf) //inf – une valeur numerique qui sera introduite
{
	nod *temp; //element auxiliaire dans lequel on fera l’ajout initiel 
	temp=(nod*)malloc(sizeof(nod));
temp->val=inf; //on peuple l’element de valeur dans la liste, puis celui de liaison
 
	//on va tester s’il y a encore des elements dans la liste
	if (cap==NULL) //situation quand la liste est vide
	{
		temp->next=NULL;
		cap=temp;
	}
	else //quand il y a encore des elements dans la liste
	{
		temp->next=cap;
		cap=temp;
	}
	return cap;
}
 
//ajouter un element derriere la liste
nod* adSpate(nod *cap, int inf)
{
	nod *temp, *aux; //aux – on utilise pour parcourir la liste
	temp=(nod*)malloc(sizeof(nod));
	temp->val=inf;
 
	//tester s’il y a encore des elements dans la liste
	if (cap==NULL) //si la liste est vide
	{
		temp->next=NULL;
		cap=temp;
	}
	else //s’il y a encore des elements dans la liste
	{
		aux=cap;
		while(aux->next!=NULL)
			aux=aux->next;
		aux->next=temp;
		temp->next=NULL;
	}
return cap;
}
 
//ajouter un element sur une certaine position de la liste
nod* adInterior(nod *cap, int valpoz, int valnou)
{
	nod *temp, *aux;
	temp=(nod*)malloc(sizeof(nod));
	temp->val=valnou;
	if (cap==NULL)
	{
		temp->next=NULL;
		cap=temp;
	}
	else
	{
		aux=cap;
		while((aux->next!=NULL)&&(aux->val!=valpoz))
			aux=aux->next;
		if(aux->val==valpoz)
		{
			temp->next=aux->next;
			aux->next=temp;
		}
 
		else
			printf("\nLa valeur %d ne se trouve pas dans la liste\n", valpoz);
	}
	return cap;
}
 
/*modifier une valeur de la liste (si la valeur se retrouve plusieurs fois, on modifie la premiere)*/
nod* modify(nod *cap, int valvechi, int valnou)
{
	nod *aux;
	aux=cap;
	while((aux!=NULL)&&(aux->val!=valvechi))
		aux=aux->next;
	if(aux!=NULL)
		aux->val=valnou;
	return cap;
}
 
//effacer un element devant la liste
nod* stergeFata(nod *cap)
{
	nod *temp;
	if (cap==NULL)
		printf("\nListe vide\n");
	else
	{
		temp=cap;
		cap=cap->next;
		free(temp);
	}
	return cap;
}
 
//effacer un element derriere la liste
nod* stergeSpate(nod *cap)
{
	nod *temp,*aux;
	if (cap==NULL)
		printf("\nListe vide\n");
	else
		if (cap->next==NULL)
		{
			free(cap);
		}
		else
		{
			temp=cap;
			aux=temp->next;
			while(aux->next!=NULL)
			{
				aux=aux->next;
				temp=temp->next;
			}
		temp->next=NULL;
		free(aux);
		}
	return cap;
}
 
//effacer un certain element de la liste
nod* stergeVal(nod *cap, int inf)
{
	nod *temp, *aux;
	if (cap==NULL)
		printf("\nListe vide\n");
	else
		if(cap->val==inf)
		{
			temp=cap;
			cap=cap->next;
			free(temp);
		}
		else
			if(cap->next==NULL)
				printf("\nLa valeur pour effacer ne se trouve pas dans la liste\n");
			else
			{
				temp=cap;
				aux=temp->next;
				while((aux!=NULL)&&(aux->val!=inf))
				{
				aux=aux->next;
					temp=temp->next;
				}
				if(aux!=NULL)
				{
					temp->next=aux->next;
						free(aux);
				}
			}
	return cap;
}
 
//afficher les components de la liste
void afisList(nod *cap)
{
	nod *aux;
	aux=cap;
	printf("Les elements de la liste sont: ");
	while (aux!=NULL)
	{
		printf("%d ", aux->val);
		aux=aux->next;
	}
}
 
//detruire (dealocation) la liste
void destroy(nod *cap)
{
	nod *temp;
	printf("\nDetruire la liste\n");
	while(cap!=NULL)
	{
		temp=cap;
		cap=cap->next;
		free(temp);
	}
}
 
//fonction principale en execution
void main()
{
	nod *cap=NULL;
	int inf,poz;
	cap=init(cap); //initialisation de la liste
 
//introduire les elements dans la liste
	printf("Introduire des nopeuds dans la liste. Finir avec zero: ");
	scanf("%d",&inf);
	while(inf!=0) //l’introduction va finir avec l’element "0"
	{
		cap=adSpate(cap,inf); //on ajoute par derriere
		scanf("%d",&inf);
	}
 
	afisList(cap); //affichage des components de la liste
//ajouter des elements devant
	printf("\nIntroduir un element pour l’ajouter sur la premiere position: ");
	scanf("%d",&inf);
	cap=adFata(cap,inf);
	afisList(cap); //affichage des components de la liste
 
//ajouter par l’interieur
	printf("\nIntroduire la valeur apres inserrer: ");
	scanf("%d",&poz);
	printf("Introduire un element pour l’ajouter apres la valeur %d: ",poz);
	scanf("%d",&inf);
	cap=adInterior(cap,poz,inf);
 
	afisList(cap); //affichage des components de la liste
//modifier une valeur de la liste
	printf("\nIntroduire la valeur pour modifier: ");
	scanf("%d",&poz);
	printf("Introduire la nouvelle valeur: ");
	scanf("%d",&inf);
	cap=modify(cap,poz,inf);
 
	afisList(cap); //affichage des components de la liste
//affacer le premier element de la liste
	printf("\n\nOn efface le premier element de la liste- ");
	cap=stergeFata(cap);
	afisList(cap); //affichage des components de la liste
 
//effacer par derriere la liste
	printf("\nEffacer le dernier elem,ent de la liste- ");
	cap=stergeSpate(cap);
	afisList(cap);
 
//effacer une valeur de la liste
	printf("\nIntroduire la valeur pour effacer: ");
	scanf("%d",&inf);
	cap=stergeVal(cap,inf);
	afisList(cap);
 
//distrugerea (dealocarea) listei
	printf("\n\nDetruire la liste");
	destroy(cap);
 
	getch();
}
Cookies help us deliver our services. By using our services, you agree to our use of cookies.