Lineární spojový seznam

Jsem studentem ČZU , obor SyI. V předmětu Programování jsme dostali úkol vytvořit program v jazyku C. Jeho náplní je přidání položky na a pak do seznamu (první úkol) a po té odstranění položky seznamu (další ) . Tyto dva úkoly jsem spojil. Protože po mě ho chce až moc lidí , tak ho raději zveřejim . Chci tak předejít plagiátorství . Když to někdo celé zkopíruje a odevzdá tak jak je , je to jeho blbost . Tohle je pravé umění !! btw myslim , že přes některý kompilátory to neprojde )) Jsem asi fakt ďábel.  ZDROJOVÝ KÓD :::

#include <stdio.h>
#include <stdlib.h>
// Hynek Darbujan SYi , codeblocks ,odstraneni polozky ze seznamu + nacteni ,verze snad 100.Je to dost  moje práce.
// dost mne inspirovala stranka - http://cs.wikipedia.org/wiki/Spojový_seznam ,hlavne vlozeni , pozdeji jsem podle toho upravil strukturu tak aby to trochu "vypadalo "
//
typedef struct sp_seznam
{
int data;
struct sp_seznam *next;
} uzel;
//pridani//
uzel *pridat_na_seznam (uzel **p, int i)
{
uzel *n = NULL;
if (p) {
n = malloc(sizeof(uzel)); // vymezeni pameti
if (n) {
n->data = i;
n->next = *p;
*p = n;
}
}
return n;
}
void vypis_seznam (uzel *n) // fuknce pro vypis
{
if (!n) {  // kontrola seznamu
printf("seznam je prazdny\n");
return;
}
while (n) {  // vypis obsahu
printf("print %d\n", n->data);
n = n->next;
}
}
uzel *vloz_do (uzel **p, int i, int index)
{
uzel *n = NULL;
if (p) {
if (*p) {   // jestli p neni prazdne
uzel *r = NULL; // namíření na zacatek
uzel *s = *p; // propojeni
int idx = 0; // pro porovnani na zacatek
while (s) {
if (idx == index) { //vlozte sem - index. kam chceme
n = malloc(sizeof(uzel)); // vymezeni pameti
if (n) {
n->data = i;
if (r) {
n->next = r->next;  // vychytavka - vlozeni mezi r a r-next
r->next = n;
} else {
n->next = *p;  //dalsi
*p = n;
}
}
return n;
}
idx++; // dalsi
r = s;
s = s->next;
}
if (idx == index) {  // vlozit na konec - omezeni k
n = malloc(sizeof(uzel)); // vycleneni
if (n) {
n->data = i;
n->next = NULL;
r->next = n;
}
}
} else {
if (!index) { // vlozit na vrchol - omezeni h
n = malloc(sizeof(uzel));  // vycleneni
if (n) {
n->data = i;
n->next = NULL;
*p = n;
}
}
}
}
return n;
}
uzel **hledej_smudlo (uzel **n, int o) // funce na vyhledavani
{
if (n) {
while (*n) {
if (o==0) return n;
o--;// pocet cyklu
n = &(*n)->next;
}
}
return NULL;
}
void odstran(uzel **p)
{
if (p && *p) {
uzel *n = *p;
*p = (*p)->next;
free(n);
}
}
int main (void)
{
uzel *n = NULL; // na zacatek
int cislo;
int l=0;
int h=0;
int pozice;
char pozn;
pozn=0;
// naplneni seznamu
printf("jestli chcete naplnit seznam automaticky , tak zmackni 1 , jetsli ne ,tak neco jineho \n");
scanf("%d",&cislo);
if (cislo==1){
pridat_na_seznam(&n, 01);
pridat_na_seznam(&n, 12);
pridat_na_seznam(&n, 23);
pridat_na_seznam(&n, 34);
pridat_na_seznam(&n, 45);
pridat_na_seznam(&n, 56);
h=6;} // nastaveni max poctu
else {
while(cislo !=9999){
flush(cislo);
printf("zadej cislo do seznamu , az jich budes mit dost napiš 9999:\n");
scanf("%d",&cislo);
if(cislo !=9999){
pridat_na_seznam(&n,cislo);
h++;
}
}}
vypis_seznam(n);
int qw;
printf("jestli chces pridavat polozku napis 1 , jestli mazat , tak neco jinyho, jestli chces skoncit tak zmacni ten krizek vpravo nahore v rohu \n");
scanf("%d",&qw);
if (qw==1)
{
printf("zadej cislo na vlozeni do seznamu\n");
if (scanf("%d",&cislo)!=1)

{
printf("cislo ! program bude ukoncen");
return 0;}
printf("pozici pro cislo v seznamu (0 az n), vyssi cislonez je pocet polozek bude vlozeno na konec seznamu , seznam je vypsan sestupne \n");
if (scanf("%d",&pozice)!=1)
{ return 0; }
vloz_do(&n,cislo,pozice);
vypis_seznam(n);
printf("!finito!");
} else {
printf("zadej číslo polozky , co chces odstranit (0-n) , cislovani je odshora dolů \n");
if (scanf("%d",&pozice)!=1)
{ return 0;}
odstran(hledej_smudlo(&n, pozice));
vypis_seznam(n);
printf("!finito!");
return 0;}
}
int flush() {  // funkce na vycisteni
char c;
c = getchar();
while (c != '\n' && c != EOF) {
c = getchar();
}
}

 

dodatek : jasně ,že nejsem suprprogramátor , řekl bych , že mi to někdy vůbec nejde )) ale to neznamená , že jsem tohle nedělal se nadšením :-D , btw , jestli tam mám nějaký chyby , tak sem s nima - ale nechi , žádný urážky -, nebo něco ve stylu , že napíšete , kde je chyba , ale nedáte sem její řešení , to mi je k ničemu .

Tvorbou programů se neživim a ani asi nebudu ))....jsem říkal , že jsem ďábel

ps. znáte vtipy v cčku ? tak tohle je jeden z nich :-D

-edit. poučení č1 - nedávat názvy proměnných jen písmenka - třeba fakt názvy

Autor: Hynek Dařbujan | středa 5.5.2010 19:21 | karma článku: 11,37 | přečteno: 2859x