Anonymní profil Petr – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Petr – Programujte.comAnonymní profil Petr – Programujte.com

 

Příspěvky odeslané z IP adresy 89.102.165.–

Petr
C / C++ › C++ řazení seznamu
24. 7. 2012   #160586

Už jsem to řazení vyřešil, chtěl bych poděkovat všem poděkovat za ochotu, hlavně JANO 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <iostream>

using namespace std;
int i;
int pole[10];


typedef struct seznam{  
  int data;
  struct seznam *dalsi;
} SEZNAM;
SEZNAM *zarazka;



void vypis(const SEZNAM *ps) {
  while (ps != NULL)  {       
    printf("%i\n", ps->data); 
    ps = ps->dalsi;           
  }

}


void pridej(SEZNAM **prvniPrvekSeznamu, int prvek, SEZNAM *s) {

	SEZNAM *s2, *s3, *s1;

	s1 = s;
	s2 = s;

	cout << "gener "  << prvek << endl;
	if (s1 != NULL) cout << "s "  << s1->data << endl;



	if (s1 == NULL){
		s1 = (SEZNAM *) malloc(sizeof(SEZNAM));
		s1->data = prvek;
		s1->dalsi = *prvniPrvekSeznamu;
		*prvniPrvekSeznamu = s1;
	}
	else {
		while (s1 != NULL)  { 
				if (prvek < s1->data){  

					cout << prvek << " mensi "  << s1->data << endl;

					cout << " dalsi "  << s1->dalsi << endl;

					if (s1->dalsi == NULL){
						cout << " pridat pred " << s1->data << endl;
						s3 = (SEZNAM *) malloc(sizeof(SEZNAM));

						s2 = s1->dalsi;
						s3->data= prvek;
						s3->dalsi= s2;

						s1->dalsi = s3;

							if (s1 == s){											// nastaveni prvniho prvku
								cout << " prvni prvek je - "  << s->data << endl;
								*prvniPrvekSeznamu = s;
								break;
							}else{
								cout << " prvni prvek je - "  << s->data << endl;
								*prvniPrvekSeznamu = s;
								break;
							}
						
					}


					s2 = s1;
					s1 = s2->dalsi;
				}

				if (prvek >= s1->data){  

						if (s1 == s){										// pokud se jedna o prvni prvek v seznamu
							cout << " pridat pred " << s->data <<  endl;
							s = (SEZNAM *) malloc(sizeof(SEZNAM));

						
							s->data = prvek;
							s->dalsi = *prvniPrvekSeznamu;



							
							cout << " prvni prvek je - "  << s->data << endl;   // nastaveni prvniho prvku
							
							*prvniPrvekSeznamu = s;
							break;
						}
						else{
						
							cout << s1->data << " neni mensi - pridat "  << prvek << endl;

							s3 = (SEZNAM *) malloc(sizeof(SEZNAM));
							s3->data = prvek;
							s3->dalsi = s1;
							s2->dalsi = s3;


							*prvniPrvekSeznamu = s;

							break;



						}


				}

		}
		
    
		}


  
		cout << " "  << endl; 
		while (s != NULL)  {     
			cout << "vypis------ "  << s->data << endl; 
			s = s->dalsi;    
			} 	


return;











}

void mazejvse(SEZNAM **prvniPrvekSeznamu) {
  SEZNAM *ps;

  ps = *prvniPrvekSeznamu;
  while (ps) {
    *prvniPrvekSeznamu = ps->dalsi;
    free(ps);
    ps = *prvniPrvekSeznamu;
  }
  	getch();
}




int main(void) {
  SEZNAM *s;
  SEZNAM *s4;
  srand(time(0));
 

  s = NULL;				/* Důleľité, v opačném případě by nebyl seznam ukončen. */  //tady ten seznam tam davas jako parametr pps a ten potrebujes aby ti to vratilo upravenej toho docilis tim &
	cout  << "Vygenerovane hodnoty v poli:" << endl;
	cout  << "---------------------------" << endl;

	for (i = 0; i < 10; i++) {	
		cout  << i << "\n" << endl;
		cout  << i << "---------------------------" << endl;
		pole[i] = (rand() % 1001);
		pridej(&s, pole[i], s);
	}



	puts("\n");
	puts("Seznam:");
	puts("----------------------------");
	vypis(s);




	mazejvse(&s);
	return 0;
  	getch();
}
Petr
C / C++ › C++ řazení seznamu
23. 7. 2012   #160497

Zdravím, předem bych chtěl poděkovat všem za jakoukoliv snahu. Ve škole jsem dostal za úkol udělat program v C++ na řazení celých kladných čísel metodou Radix sort. V programu se musí využít seznam.

Tímto úkolem se již zabývám druhý den a zdá se mi, že se v tom čím dál víc zamotávám. Ze začátku jsem převzal kód z linuxsoft.cz a snažil se ho upravit. Našel jsem dokonce knihu na books.google.com, kde se tato problematika popisuje, ale pořad mi něco uniká a nechce to pracovat, ať to zkouším, jak to chci.

Nejvíce by mi pomohlo, kdyby mi někdo poradil, jak mam vytvořit seřazený seznam. Jinak řečeno, bych potřeboval, aby se mi vygenerovalo číslo, zavolala se funkce přidat, kde by se spustil nějaký cyklus, který by porovnával čísla, až by našel místo kam to číslo patří, seznam by se rozpojil a číslo bylo vnořené.

Přidávám kód, se kterým jsem to zkoušel udělat.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
int i;
int pole[10];


typedef struct seznam {  // udela typ seznam, do ktereho se ulozi data a ukazatel na dalsi data
  int data;
  struct seznam *dalsi;
} SEZNAM;
SEZNAM *zarazka;

void vypis(const SEZNAM *ps) {
  while (ps != NULL)  {       /* Dokud nejsme na konci, */
    printf("%i\n", ps->data); /* vypią aktuální prvek   */
    ps = ps->dalsi;           /* a posuň se na daląí.   */
  }

}

void pridej(SEZNAM **pps, int prvek) {
  SEZNAM *ps;

  ps = (SEZNAM *) malloc(sizeof(SEZNAM));
  if (!ps) {			
    return;
  }


  ps->data = prvek;
  ps->dalsi = *pps;
  *pps = ps;

  while (ps != NULL)  {       /* Dokud nejsme na konci, */
    printf("%i\n ---", ps->data); /* vypią aktuální prvek   */
    ps = ps->dalsi;           /* a posuň se na daląí.   */	
  }



}

void mazejvse(SEZNAM **pps) {
  SEZNAM *ps;

  ps = *pps;
  while (ps) {
    *pps = ps->dalsi;
    free(ps);
    ps = *pps;
  }
  	getch();
}


int main(void) {
  SEZNAM *s;
  srand(time(0));
  int prvek;

  s = NULL; /* Důleľité, v opačném případě by nebyl seznam ukončen. */
	for (i = 0; i < 10; i++) {	
		pole[i] = (rand() % 100);				
	}

	puts("Vygenerovane hodnoty v poli:");
	puts("----------------------------");
	for (i = 0; i < 10; i++) {	
		printf("%i\n", pole[i]);
		pridej(&s, pole[i]);
	}


	puts("\n");
	puts("Seznam:");
	puts("----------------------------");
	vypis(s);


	mazejvse(&s);
	return 0;
  	getch();
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý