Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite

Laborator
8/10 (2 voturi)
Conține 1 fișier: doc
Pagini : 15 în total
Cuvinte : 2426
Mărime: 9.57KB (arhivat)
Publicat de: Nora Stoian
Puncte necesare: 0
Laborator nr 5

Extras din laborator

Pentru crearea listei se va crea mai intâi un prim nod al listei. Fie p o variabilă pointer care va indica mereu adresa primului nod al listei şi q o variabilă pointer auxiliară tot de tipul referinţă. Pentru realizarea acestui program avem nevoie de următoarele funcţii:

-funcţia creare() care realizează crearea listei apelând funcţia ins_cf() unde inserarea se face în faţa listei în modul următor: se generează o nouă locaţie de memorie cu structura definită la început, se pregătesc câmpurile cheie şi info, în câmpul urm a acestui nod se pune adresa primului nod, iar variabila pointer p va conţine adresa noului nod care devine primul nod.

-funcţia inserare după un nod dat ins_d() care insereaza nodul s după nodul r. În primul rând se generează o nouă locaţie de memorie pentru nodul s, apoi se pregătesc campurile cheie şi info ale acestuia, în s->urm se pune r->urm, iar în final în r->urm se pune s.

-funcţia inserare inaintea unui nod dat ins_i() care insereaza nodul s înaintea nodului r. În primul rând se generează o nouă locaţie de memorie pentru nodul s, se copiază nodul *r peste nodul *s şi apoi se introduc câmpurile cheie şi info care definesc noul nod în câmpurile corespunzătoare ale vechiului nod *r.

-funcţia de căutare cautare(int k) care caută în listă nodul cu cheia k. În această funcţie se parcurge lista, iar în cazul în care cheia căutată se află în listă funcţia returnează 1, în caz contrar returnează 0.

-funcţia suprimare după un nod dat suprima_d(). Se dă un nod printr-o variabilă pointer r, se cere suprimarea nodului de după nodul *r.Suprimarea se face cu uşurinţă modificând câmpul urm al nodului *r astfel încât să indice succesorul succesorului său. Acest lucru se realizează mai simplu dacă în s memorăm succesorul lui r(s=r->urm) iar în r->urm memorăm s->urm. Dacă în cele ce urmează nu mai avem nevoie de informaţia din locaţia succesorului nodului *r atunci putem pune la dispoziţia sistemului locaţia succesorului prin apelul funcţiei free(s).Dacă *r este ultimul nod al listei liniare atunci nu există nodul *s şi în acest caz nu avem ce suprima.

-funcţia de suprimare a unui nod dat suprima_n().Fie r variabila pointer care desemnează adresa nodului care trebuie suprimat. Dacă nodul care trebuie suprimat nu e ultimul atunci fie s variabila pointer care desemnează succesorul lui r(s=r->urm) se copiază succesorul peste nodul *r(*r=*s) şi se eliberează zona ocupată de s (free(s)). Dacă nodul de suprimat este ultimul dar nu e primul luăm o variabilă s care parcurge lista de la început şi până când s indică nodul care are ca successor pe r şi punem în s->urm NULL iar apoi eliberăm zona r. Dacă *r este ultimul şi primul se eliberează pur şi simplu zona r prin apelarea lui free(r).

-funcţia de listare (listare()) care parcurge lista de la început şi până la sfârşit şi afişează câmpurile cheie şi info ale fiecărui nod.

Programul C care efectuează toate aceste operaţii asupra unei liste liniare simplu înlănţuite cu inserare în faţă este:

#include<stdio.h>

#include<conio.h>

#include<alloc.h>

#include<stdlib.h>

#include<ctype.h>

struct nod

{

int cheie;

char info[10];

struct nod *urm;

};

typedef struct nod Tnod;

typedef Tnod *ref;

ref p,q,r,s;

void ins_cf(void)

{

q=malloc(sizeof(Tnod));

printf("Cheia=");scanf("%d",&q->cheie);

printf("Info=");

scanf("%s",q->info);

fflush(stdin);

q->urm=p;

p=q;

}/*inc_cf*/

void ins_i(void)

{

ref s;

s=malloc(sizeof(Tnod));

*s=*r;

r->urm=s;

printf("Cheia=");scanf("%d",&s->cheie);

printf("Info=");

fflush(stdin);

scanf("%s",s->info);

}/*ins_i*/

void ins_d(void)

{

s=malloc(sizeof(Tnod));

printf("Cheia=");scanf("%d",&s->cheie);

printf("Info=");

fflush(stdin);

scanf("%s",s->info);

s->urm=r->urm;

r->urm=s;

}/*ins_d*/

void creare(void)

{

char opt;

p=NULL;

clrscr();

do

{

ins_cf();

printf("Introduceti elem?dn");

fflush(stdin);

scanf("%c",&opt);

opt=toupper(opt);

}

while(opt=='D');

}/*creare*/

int cautare(int k)

{

int b=0;

r=p;

while ((b==0)&&(r!=NULL))

if ((r->cheie)==k)

b=1;

else r=r->urm;

Preview document

Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 1
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 2
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 3
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 4
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 5
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 6
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 7
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 8
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 9
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 10
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 11
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 12
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 13
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 14
Efectuarea Tuturor Operațiilor de Bază asupra unei Liste Liniare Simplu Înlănțuite - Pagina 15

Conținut arhivă zip

  • Efectuarea Tuturor Operatiilor de Baza asupra unei Liste Liniare Simplu Inlantuite.doc

Alții au mai descărcat și

Baze de Date în Visual Foxpro

Baze de date în Visual FoxPro 1. Tabele de date FoxPro este un mediu de dezvoltare integrat, care, pe lânga instrumentele de programare, ofera...

Referințe și pointeri

In C++ exista doua modalitati de lucra cu adrese de memomorie: pointeri si referinte. Pointeri Pointerii sunt variabile care contin adresa unei...

Visual Fox Pro

VISUAL FOX PRO (VFP) ==================== Tipuri de programare: - liniara - structurata - orientata pe obiecte VFP este un mediu de...

Probleme C++ Rezolvate

Problema 1: cmmdc(a, b) #include<stdio.h> #include<conio.h> //algoritmul lui Euclid //cel mai mare divizor comun pentru doua numere strict...

Laboratoare C++ (SDA)

1.1. Crearea şi afişarea unei liste Exerciţiul 1. Să se scrie programul pentru crearea unei liste simplu înlănţuite cu preluarea datelor de la...

Programare în C

Primul program C #include <stdio.h> int main(void) { printf(“Salut!\n”); printf(“Iata primul program C!”); return 0; } Caracterele...

Implementarea tipului de date abstract - lista simplu înlănțuită în C

Lucrare de laborator Nr.2 si 3 Tema: Implementarea tipului de date abstract “Lista simplu inlantuita” in C Scopul lucrarii: obtinerea...

Structuri de Date și Algoritmi - Curs 1

Curs 1 - Introducere. Structuri de date - noţiuni generale Introducere Tipuri de bază. Pointeri. Tablouri. Paradigme de programare Programare...

Te-ar putea interesa și

Structuri de Date și Algoritmi

1. Conceptul de dată În informatică, prin dată, se desemnează un model de reprezentare a informaţiei, model cu care se poate opera pentru a obţine...

Structuri de Date și Alogoritmi

EXTENSII ALE LIMBAJULUI C++ A. Operaţii de intrare-ieşire specifice limbajului C++ I. Noţiuni teoretice Limbajul C++ furnizează o bibliotecă...

Java

Aplicaţia 1. (Clase derivate) Clasa c1 are 2 variabile membre (int x şi y) şi o metodă (metoda1()) Clasele c2 şi c3 extind clasa c1. Clasa c2...

Ai nevoie de altceva?