2016-11-21 12 views
-3

в настоящее время работает над проектом, и перетасовки последняя функция я должен написать, но я запутался и я не знаю, какперетасовки связанный стек список

может кто-нибудь здесь мне помочь? Спасибо, в любом случае !

так вот мой класс

// Creating a NODE Structure 
struct node 
{ 
    int data; 
    struct node *next; 

}; 


// Creating a class STACK 
class tumpukan 
{ 
    struct node *top; 
    public: 
    tumpukan() // constructure 
    { 
     top=NULL; 
    } 
void push(int x) 
{ 
    struct node *ptr; 
    ptr=new node; 
    ptr->data=x; 
    ptr->next=NULL; 
    if(top!=NULL) 
    ptr->next=top; 
    top=ptr; 
} 



int pop() 
{ 
struct node *temp; 
    if(top==NULL) 
     { 
      printf("Tumpukan Kosong \n"); 
     } 
temp=top; 
top=top->next; 
return temp->data; 
delete temp; 
} 



void show() 
{ 
    struct node *ptr1=top; 
    printf("isi tumpukan : \n"); 
    while(ptr1!=NULL) 
    { 
    cout<<ptr1->data<<" ->"; 
    ptr1=ptr1->next; 
    } 
    printf("NULL \n"); 
} 

}; 

любая помощь приветствуется!

+1

Почему вы хотите перетасовать стек? Точка стека заключается в том, чтобы поддерживать порядок FILO, перетасовывая поражения этой цели. – lcs

+1

Возможный дубликат [Случайное перетасовка связанного списка] (http://stackoverflow.com/questions/23094055/randomly-shuffling-a-linked-list) –

+0

Просьба уточнить конкретные требования. Кроме того, почему вы перепрограммируете с нуля, вместо того, чтобы использовать концепции, которые легко могут быть частью языка? Наконец, ваша реализация по-прежнему нуждается в работе (например, ваш метод pop по-прежнему будет терпеть крах после печати «Empty Stack») –

ответ

0

Вы можете создать вектор, содержащий адреса всех узлов, называть его V и сделать набор индексов от 1 до N (N - количество узлов), вызвать его I. Создать пустой стек S. Теперь: (psuedocode)

for i in range 1 to V.size(): 
    index=I.pick_at_rand() // you can easily find these sort of functions 
    I.delete(index) 
    if(S.top!=NULL): 
     V[i].next=S.top 
     S.push(V[index]) 
    else: 
     S.push(V[index])