Skip to content

Instantly share code, notes, and snippets.

@unaipme
Last active May 16, 2018 10:19
Show Gist options
  • Save unaipme/4a0b59917582739292d4866b8b881e4c to your computer and use it in GitHub Desktop.
Save unaipme/4a0b59917582739292d4866b8b881e4c to your computer and use it in GitHub Desktop.
Zerrenda kateatuak
#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");
}
#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