Last active
May 16, 2018 10:19
-
-
Save unaipme/4a0b59917582739292d4866b8b881e4c to your computer and use it in GitHub Desktop.
Zerrenda kateatuak
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#define MAX_STR 128 | |
typedef struct zenbakia { | |
int balorea; | |
struct zenbakia *hurrengoa; | |
} ZENBAKIA; | |
ZENBAKIA *zenbakiBerriaSartu(ZENBAKIA* hasiera, int zbk); | |
ZENBAKIA *azkenZenbakiaEzabatu(ZENBAKIA* hasiera); | |
void zerrendaErakutsi(ZENBAKIA *hasiera); | |
int main() { | |
int aukera; | |
char str[MAX_STR]; | |
ZENBAKIA *hasiera = NULL; | |
do { | |
printf("****************ONGI ETORRI****************\n"); | |
printf("* 1.-Pilan elementu berri bat sartu *\n"); | |
printf("* 2.-Pilan dagoen azken elementua kendu *\n"); | |
printf("* 3.-Pantailan idatzi pila osoa *\n"); | |
printf("* 0.-Irten *\n"); | |
printf("*******************************************\n"); | |
printf("* Zure aukera: "); | |
fgets(str, MAX_STR, stdin); | |
sscanf(str, "%d", &aukera); | |
//scanf("%d", &aukera); | |
if (aukera == 1) { | |
int zbk; | |
printf("Sartu zenbakia: "); | |
fgets(str, MAX_STR, stdin); | |
sscanf(str, "%d", &zbk); | |
hasiera = zenbakiBerriaSartu(hasiera, zbk); | |
} else if (aukera == 2) { | |
hasiera = azkenZenbakiaEzabatu(hasiera); | |
} else if (aukera == 3) { | |
zerrendaErakutsi(hasiera); | |
} else if (aukera != 0) { | |
printf("Aukera hori ez da existitzen, berriz saiatu.\n"); | |
} | |
} while (aukera != 0); | |
} | |
ZENBAKIA *zenbakiBerriaSartu(ZENBAKIA* hasiera, int zbk) { | |
ZENBAKIA *berria = (ZENBAKIA *) malloc(sizeof(ZENBAKIA)); | |
berria->balorea = zbk; | |
berria->hurrengoa = hasiera; | |
return berria; | |
} | |
ZENBAKIA *azkenZenbakiaEzabatu(ZENBAKIA* hasiera) { | |
if (hasiera == NULL) { | |
printf("Ez dago zenbakirik\n"); | |
} else if (hasiera->hurrengoa == NULL) { | |
free(hasiera); | |
hasiera = NULL; | |
} else { | |
ZENBAKIA *ptr = hasiera, *aurrekoa = NULL; | |
while (ptr->hurrengoa != NULL) { | |
aurrekoa = ptr; | |
ptr = ptr->hurrengoa; | |
} | |
aurrekoa->hurrengoa = NULL; | |
free(ptr); | |
} | |
return hasiera; | |
} | |
void zerrendaErakutsi(ZENBAKIA *hasiera) { | |
if (hasiera == NULL) { | |
printf("Ez dago zenbakirik\n"); | |
return; | |
} | |
ZENBAKIA *ptr = hasiera; | |
while (ptr != NULL) { | |
printf("%d ", ptr->balorea); | |
ptr = ptr->hurrengoa; | |
} | |
printf("\n"); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#define MAX_STR 128 | |
#define irakurri(str) fgets(str, MAX_STR, stdin); | |
typedef struct katea { | |
char balorea[MAX_STR]; | |
struct katea *hurrengoa; | |
} KATEA; | |
typedef enum boolean {false, true} boolean; | |
void bistaratu(KATEA *hasiera); | |
void kateaGehitu(KATEA **, char []); | |
KATEA *posizioAraberaBilatu(KATEA *, int ); | |
void bistaratuPosizioan(KATEA *, int); | |
void kateaEzabatau(KATEA **, int); | |
int kateaBilatu(KATEA *, char []); | |
void kateaKonkatenatu(KATEA **, char [], int ); | |
int azpikateaDutenKopurua(KATEA *, char []); | |
KATEA *azpikateaGehienDuenaAurkitu(KATEA *, char [], int *); | |
int main() { | |
int aukera; | |
char str[MAX_STR]; | |
KATEA *hasiera = NULL; | |
do { | |
printf("****************ONGI ETORRI****************\n"); | |
printf("* 1.-Kate bat gehitu *\n"); | |
printf("* 2.-\"i\" posizioko katea bistaratu *\n"); | |
printf("* 3.-\"i\" posizioko katea kendu *\n"); | |
printf("* 4.-Katea bilatu *\n"); | |
printf("* 5.-Kate bat konkatenatu *\n"); | |
printf("* 6.-Azpikate kopurua aurkitu *\n"); | |
printf("* 7.-Azpikatea gehien duena aurkitu *\n"); | |
printf("* 0.-Irten *\n"); | |
printf("*******************************************\n"); | |
printf("* Zure aukera: "); | |
fgets(str, MAX_STR, stdin); | |
sscanf(str, "%d", &aukera); | |
//scanf("%d", &aukera); | |
if (aukera == -1) { | |
bistaratu(hasiera); | |
} else if (aukera == 1) { | |
printf("Sartu katea: "); | |
//fgets(str, MAX_STR, stdin); | |
irakurri(str); | |
kateaGehitu(&hasiera, str); | |
//kateaGehitu2(&hasiera, str); | |
} else if (aukera == 2) { | |
int posizioa; | |
printf("Esan posizioa (1-etik hasita): "); | |
irakurri(str); | |
sscanf(str, "%d", &posizioa); | |
bistaratuPosizioan(hasiera, posizioa); | |
} else if (aukera == 3) { | |
int posizioa; | |
printf("Esan posizioa (1-etik hasita): "); | |
irakurri(str); | |
sscanf(str, "%d", &posizioa); | |
kateaEzabatau(&hasiera, posizioa); | |
} else if (aukera == 4) { | |
printf("Sartu bilatzeko testua: "); | |
irakurri(str); | |
int posizioa = kateaBilatu(hasiera, str); | |
if (posizioa == -1) printf("Ez da katea aurkitu\n"); | |
else printf("Katea %d posizioan aurkitu da\n", posizioa); | |
} else if (aukera == 5) { | |
int posizioa; | |
char katea[MAX_STR]; | |
printf("Sartu konkatenatzeko testua: "); | |
irakurri(katea); | |
printf("Sartu posizioa: "); | |
irakurri(str); | |
sscanf(str, "%d", &posizioa); | |
kateaKonkatenatu(&hasiera, katea, posizioa); | |
} else if (aukera == 6) { | |
printf("Sartu bilatu nahi duzun azpikatea: "); | |
irakurri(str); | |
printf("Azpikatea %d aldiz aurkitu da.\n", azpikateaDutenKopurua(hasiera, str)); | |
} else if (aukera == 7) { | |
printf("Sartu bilatu nahi duzun azpikatea: "); | |
irakurri(str); | |
int kopuruAltuena; | |
KATEA *irabazlea = azpikateaGehienDuenaAurkitu(hasiera, str, &kopuruAltuena); | |
if (irabazlea == NULL) { | |
printf("Ez dago katerik\n"); | |
} else if (kopuruAltuena == 0) { | |
printf("Ez da azpikatea aurkitu\n"); | |
} else { | |
printf("Azpikatea gehien duen katea \"%s\" da, %d aldiz\n", irabazlea->balorea, kopuruAltuena); | |
} | |
} else if (aukera != 0) { | |
printf("Aukera hori ez da existitzen, berriz saiatu.\n"); | |
} | |
} while (aukera != 0); | |
printf("Agur!"); | |
} | |
void bistaratu(KATEA *hasiera) { | |
int pos = 1; | |
KATEA *ptr = hasiera; | |
if (ptr == NULL) { | |
printf("Ez dago katerik.\n"); | |
return; | |
} | |
while (ptr != NULL) { | |
printf("%d: '%s'\n", pos++, ptr->balorea); | |
ptr = ptr->hurrengoa; | |
} | |
} | |
void kateaGehitu(KATEA **hasiera, char str[]) { | |
KATEA *berria = (KATEA *) malloc(sizeof(KATEA)); | |
str[strlen(str) - 1] = '\0'; | |
strcpy(berria->balorea, str); | |
berria->hurrengoa = *hasiera; | |
*hasiera = berria; | |
} | |
KATEA *posizioAraberaBilatu(KATEA *hasiera, int pos) { | |
int ref = 1; | |
KATEA *ptr = hasiera; | |
while (ref != pos && ptr != NULL) { | |
ptr = ptr->hurrengoa; | |
ref++; | |
} | |
return ptr; | |
} | |
void bistaratuPosizioan(KATEA *hasiera, int pos) { | |
KATEA *ptr = posizioAraberaBilatu(hasiera, pos); | |
if (ptr == NULL) { | |
printf("Ez dago zenbakirik posizio horrekin.\n"); | |
} else { | |
printf("Katea: \"%s\"\n", ptr->balorea); | |
} | |
} | |
void kateaEzabatau(KATEA **hasiera, int pos) { | |
if (hasiera == NULL) return; | |
KATEA *aurrekoa = NULL, *ptr = *hasiera; | |
if (*hasiera != NULL && pos == 1) { | |
free(*hasiera); | |
*hasiera = NULL; | |
return; | |
} | |
int ref = 1; | |
while (ptr != NULL && pos != ref) { | |
ref++; | |
aurrekoa = ptr; | |
ptr = ptr->hurrengoa; | |
} | |
if (ptr != NULL && pos == ref) { | |
aurrekoa->hurrengoa = ptr->hurrengoa; | |
free(ptr); | |
} | |
} | |
int kateaBilatu(KATEA *hasiera, char str[]) { | |
int pos = 1; | |
str[strlen(str) - 1] = '\0'; | |
KATEA *ptr = hasiera; | |
while (ptr != NULL) { | |
if (!strcmp(ptr->balorea, str)) return pos; | |
pos++; | |
ptr = ptr->hurrengoa; | |
} | |
return -1; | |
} | |
void kateaKonkatenatu(KATEA **hasiera, char str[], int pos) { | |
KATEA *ptr = posizioAraberaBilatu(*hasiera, pos); | |
str[strlen(str) - 1] = '\0'; | |
if (ptr == NULL) printf("Ez da katerik aurkitu %d posizioan\n", pos); | |
else strcat(ptr->balorea, str); | |
} | |
int azpikateaDutenKopurua(KATEA *hasiera, char str[]) { | |
KATEA *ptr = hasiera; | |
int kopurua = 0; | |
str[strlen(str) - 1] = '\0'; | |
while (ptr != NULL) { | |
if (strstr(ptr->balorea, str) != NULL) kopurua++; | |
ptr = ptr->hurrengoa; | |
} | |
return kopurua; | |
} | |
KATEA *azpikateaGehienDuenaAurkitu(KATEA *hasiera, char str[], int *altuena) { | |
KATEA *ptr = hasiera, *irabazlea = NULL; | |
str[strlen(str) - 1] = '\0'; | |
int kopuruAltuena = -1; | |
while (ptr != NULL) { | |
int kopurua = 0; | |
char *ref = ptr->balorea - 1; | |
while ((ref = strstr(ref + 1, str)) != NULL) { | |
kopurua++; | |
} | |
if (kopurua > kopuruAltuena) { | |
kopuruAltuena = kopurua; | |
irabazlea = ptr; | |
} | |
ptr = ptr->hurrengoa; | |
} | |
*altuena = kopuruAltuena; | |
return irabazlea; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment