Documente Academic
Documente Profesional
Documente Cultură
4. Să se realizeze un program care permite efectuarea următoarelor operații asupra unei liste liniare
simplu înlănţuite implementate prin tipul tablou.
#include<stdio.h>
#include<conio.h>
#include<stdio.h>
#define lung_max 10
typedef int nod;
typedef struct
{
nod elemente[lung_max];
int ultim;
}lista;
lista l;
int test, test2;
int lista_vida(int test){
if (l.ultim==0) test=1;
else test=0;
return test;
}
int lista_plina(int sw){
if (l.ultim==lung_max) sw=1;
else sw=0;
return sw;
}
void creare(void){
int i;
printf("\nCreare lista");
printf("\nSe pot introduce %d elemente\n",lung_max);
printf("\nCate elemente doriti sa aibe lista: ");fflush(stdin);
scanf("%d",&l.ultim);
for(i=0;i<l.ultim;i++)
{
printf("\nIntroduceti elementul[%d]= ",i); fflush(stdin);
scanf("%d",&l.elemente[i]);
}
}
void afisare(void){
int i,lista_vida;
if(lista_vida)
printf("\n Lista este vida!\n\n");
else
{
printf("\n\nElementele listei sunt urmatoarele:\n\n");
for(i=0;i<l.ultim;i++)
printf("%d ",l.elemente[i]);
}
}
void inserare(void){
int i;
nod e;
printf(" Introduceti un element: ");
scanf("%d",&e);
for(i=l.ultim++;i>0;i--)
l.elemente[i]=l.elemente[i-1];
l.elemente[0]=e;
}
int main()
{
printf("\n \t Crearea si afisarea unei liste liniare simplu inlantuite");
printf("\n \t \t cu ajutorul tipului tablou");
creare();
afisare();
if(lista_plina)
printf("\n\n Lista este plina!!");
else{
printf("\n \n inserarea unui element in fata listei");
inserare();
afisare();
creare();
}
getch();
}
5. Să se realizeze un program care permite efectuarea următoarelor operații asupra unei liste liniare
simplu înlănţuite folosind alocare dinamică (pointeri).
6. Să se realizeze un program care permite efectuarea următoarelor operații asupra unei liste liniare
simplu înlănţuite folosind alocare dinamică (pointeri).
#include<iostream>
#include<conio.h>
using namespace std;
struct nod {
int nr;
nod* leg;
};
nod* v, * sf, * d, * c;
int val, val1, i, info, n;
void adaugare(nod*& v, nod*& sf, int val) {
nod* c;
if (v == 0) {
v = new(nod);
v->nr = val;
v->leg = 0;
sf = v;
}
else {
c = new(nod);
sf->leg = c;
c->nr = val;
c->leg = 0;
sf = c;
}
};
void inserare_inainte(nod*& v, int val, int val1) {
nod* c, * d;
if (v->nr == val) {
d = new nod;
d->nr = val1;
d->leg = v;
v = d;
}
else {
c = v;
while (c->leg->nr != val) c = c->leg;
d = new nod;
d->nr = val1;
d->leg = c->leg;
c->leg = d;
}
}
void listare(nod* v) {
nod* c = v;
while (c) {
cout << c->nr << " ";
c = c->leg;
}
cout << endl;
}
int main(int argc, char* argv[]) {
cout << "Dati numarul de noduri:"; cin >> n;
for (i = 1; i <= n; i++) {
cout << "info:"; cin >> info;
adaugare(v, sf, info);
}
listare(v);
cout << "inserati valoarea:"; cin >> val1;
cout << "inaintea nodului cu informatia:"; cin >> val;
inserare_inainte(v, val, val1);
listare(v);
listare(v);
_getch();
return 0;
}
7. Să se realizeze un program care permite efectuarea următoarelor operații asupra unei liste liniare
dublu înlănţuite folosind alocare dinamică (pointeri).
8. Să se realizeze un program care permite efectuarea următoarelor operații asupra unei liste liniare
dublu înlănţuite folosind alocare dinamică (pointeri).
#include<iostream>
#include<conio.h>
using namespace std;
struct nod {
int nr;
nod* ls, * ld;
};
nod* s, * d, * c, * e;
int n, m, i, val;
void creare(nod*& s, nod*& d) {
cout << "info="; cin >> n;
s = new nod;
s->nr = n;
s->ld = 0;
s->ls = 0;
d = s;
}
void adaug_s(nod*& s, nod* d) {
nod* c;
cout << "info:"; cin >> n;
c = new nod;
c->nr = n;
c->ls = 0;
c->ld = s;
s->ls = c;
s = c;
}
void adaug_d(nod* s, nod*& d) {
cout << "info="; cin >> n;
c = new nod;
c->nr = n;
c->ld = 0;
d->ld = c;
c->ls = d;
d = c;
}
void adaug_i(nod* s, nod*& d) {
cout << "Dupa care inregistrare adaugam?"; cin >> val;
cout << "info="; cin >> n;
nod* c = s;
while (c->nr != val) c = c->ld;
if (c == d) {
e = new nod;
e->nr = n;
e->ld = 0;
d->ld = e;
e->ls = d;
d = e;
}
else {
e = new nod;
e->nr = n;
e->ld = c->ld;
c->ld->ls = e;
e->ls = c;
c->ld = e;
}
}
void sterg(nod*& s, nod*& d, int n) {
if (s == d) {
e = s;
s = d = 0;
}
else {
if (s->nr == n) {
e = s;
s = s->ld;
e->ld = 0;
s->ls = 0;
}
else if (d->nr == n) {
e = d;
d = d->ls;
e->ls = 0;
d->ld = 0;
}
else {
c = s;
while (c->ld->nr != n)c = c->ld;
e = c->ld;
e->ld->ls = c;
c->ld = e->ld;
e->ld = 0; e->ls = 0;
if (e = d) d = c;
}
}
delete e;
}
void listare_s(nod* s, nod* d) {
if (!s) {
cout << "Lista este vida!";
}
else {
c = s;
cout << "Listez de la stanga la dreapta: ";
while (c) {
cout << c->nr << " ";
c = c->ld;
}
}
cout << endl;
}
void listare_d(nod* s, nod* d) {
if (!s) {
cout << "Lista este vida!";
}
else {
c = d;
cout << "Listez de la dreapta la stanga: ";
while (c) {
cout << c->nr << " ";
c = c->ls;
}
}
cout << endl;
}
int main(int argc, char* argv[]) {
int val0, val1;
cout << "** Operatii asupra unei liste alocate dublu inlantuit** " << endl << endl;
cout << "Creez primul nod al listei." << endl;
creare(s, d);
do {
cout << "Cate inregistari adaugam la dreapta?";
cin >> val0;
} while (val0 < 1);
for (i = 1; i <= val0; i++) { adaug_d(s, d); }
do {
cout << "Cate inregistrari adaugam la stanga?";
cin >> val1;
} while (val1 < 1);
for (i = 1; i <= val1; i++) { adaug_s(s, d); }
listare_s(s, d);
listare_d(s, d);
cout << endl;
cout << "Inseram un nod in interiorul listei:" << endl;
adaug_i(s, d);
listare_s(s, d);
listare_d(s, d);
cout << endl;
_getch();
9. Să se realizeze un program care permite efectuarea următoarelor operații asupra unei stive
implementate prin tipul tablou
crearea stivei
inserarea unui element în vârful stivei
afișarea elementului din vârful stivei
suprimarea vârfului stivei
#include <iostream>
using namespace std;
struct nod{int info;
nod* ant;};
nod* creeazanod(int info)
{
nod *nou=new nod();
nou->info=info;
nou->ant=NULL;
return nou;
}
bool isEmpty(nod *varf)
{
return varf==NULL;
}
void push(nod * &varf, int info)
{
nod* nou=creeazanod(info);
nou->ant=varf;
varf=nou;
}
int peek(nod *varf)
{
if(isEmpty(varf)) return NULL;
return varf->info;
}
int pop(nod* &varf)
{
if(isEmpty(varf)) return 0;
nod *tmp=varf;
varf=varf->ant;
int rezultat=tmp->info; delete tmp;
return rezultat;
}
int main()
{
nod *varf=NULL;
cout<<"Introduceti numarul de elemente urmat de elementele stivei"<<endl;
int x,n,nr,aux; cin>>x;
aux=x;
while(x)
{
cin>>n;
push(varf,n);//creearea stivei
x--;
cout<<pop(varf)<<" ";//afisarea stivei
}
cout<<endl<<"valoarea de adaugat in stiva: ";
cin>>nr; push(varf,nr);
cout<<endl<<"Valoarea din varful stivei este: "<<peek(varf);
pop(varf);
cout<<endl<<"Dupa eliminarea varfului: "<<peek(varf);
return 0;
}
10. Să se realizeze un program care permite efectuarea următoarelor operații asupra unei cozi
implementate prin tipul tablou
creare
afișarea primului element din faţa cozii
afişarea conţinutului cozii (listare)
adaugare nou element
#include <iostream>
11. Să se realizeze un program care permite Căutarea și afișarea unui element într-o listă liniară simplu
înlănţuită creată prin tipul tablou.
#include <iostream>
12. Să se realizeze un program care permite Căutarea și afișarea unui element într-o stivă implementată
prin tipul pointer.
#include <iostream>