Răspuns :
Nu le afiseaza in ordinea pusa de tine. Dar sper sa intelegi ideea.
:)
Răspuns:
#include <iostream>
using namespace std;
struct nod{
int nr;
nod *urm;
};
nod *prim=NULL, *ultim=NULL;
void adauga(nod *&prim, nod *&ultm, int num)
{
nod *p=new nod;
p->nr=num;
if (prim==NULL)
{
prim=p; ultim=p;
prim->urm=p; ultim->urm=p;
}
else
{
p->urm=ultim->urm;
ultim->urm=p;
ultim=p;
}
}
void afisare(nod *prim, nod *ultim)
{
nod *p=prim;
do
{
cout << p->nr << " ";
p=p->urm;
}while (p!=prim);
cout << "\n";
}
void permutari(nod *prim, nod *ultim, int n)
{
nod *p, *q;
int x,a,b;
for (int i=1; i<=n; ++i)
{
afisare(prim,ultim);
x=ultim->nr;
p=prim; a=p->nr;
while (p!=ultim)
{
q=p;
p=p->urm; b=p->nr;
p->nr=a; a=b;
}
prim->nr=x;
}
}
int main()
{
int n,i;
cout << "n= "; cin >> n;
for (i=1; i<=n; ++i)
adauga(prim,ultim,i);
cout << "permutarile circulare la dreapta:" << "\n";
permutari(prim,ultim,n);
}
Explicație:
parcă lucrează bine... :)))
am folosit variabile de lucru:
x - pentru ultim (ca apoi să-l pun pe primul loc)
şi a, b pentru a efectua deplasările spre dreapta
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!