0% encontró este documento útil (0 votos)
13 vistas6 páginas

Include

El documento presenta implementaciones en C de estructuras de datos como pilas, colas, colas circulares, listas enlazadas, listas enlazadas circulares y listas dobles, junto con funciones para manipularlas. También incluye un ejemplo de uso de una matriz y una función recursiva para calcular el factorial. Se proporciona un programa principal que demuestra el uso de estas estructuras y funciones.

Cargado por

esther
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas6 páginas

Include

El documento presenta implementaciones en C de estructuras de datos como pilas, colas, colas circulares, listas enlazadas, listas enlazadas circulares y listas dobles, junto con funciones para manipularlas. También incluye un ejemplo de uso de una matriz y una función recursiva para calcular el factorial. Se proporciona un programa principal que demuestra el uso de estas estructuras y funciones.

Cargado por

esther
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

#include <stdio.

h>

#include <stdlib.h>

#define MAX 5 // Tamaño máximo para pila, cola y cola circular

// ----------------- PILA -----------------

typedef struct {

int datos[MAX];

int tope;

} Pila;

void push(Pila *p, int x) {

if (p->tope < MAX - 1)

p->datos[++p->tope] = x;

int pop(Pila *p) {

if (p->tope >= 0)

return p->datos[p->tope--];

return -1;

// ----------------- COLA -----------------

typedef struct {

int datos[MAX];

int frente, final;

} Cola;

void encolar(Cola *c, int x) {


if (c->final < MAX - 1)

c->datos[++c->final] = x;

int desencolar(Cola *c) {

if (c->frente <= c->final)

return c->datos[c->frente++];

return -1;

// ----------------- COLA CIRCULAR -----------------

typedef struct {

int datos[MAX];

int frente, final, contador;

} ColaCircular;

void encolarCircular(ColaCircular *c, int x) {

if (c->contador < MAX) {

c->datos[c->final] = x;

c->final = (c->final + 1) % MAX;

c->contador++;

int desencolarCircular(ColaCircular *c) {

if (c->contador > 0) {

int x = c->datos[c->frente];

c->frente = (c->frente + 1) % MAX;

c->contador--;
return x;

return -1;

// ----------------- LISTA ENLAZADA -----------------

typedef struct Nodo {

int dato;

struct Nodo *sig;

} Nodo;

void insertarLista(Nodo **cab, int x) {

Nodo *nuevo = (Nodo*)malloc(sizeof(Nodo));

nuevo->dato = x;

nuevo->sig = *cab;

*cab = nuevo;

// ----------------- LISTA ENLAZADA CIRCULAR -----------------

typedef struct NodoC {

int dato;

struct NodoC *sig;

} NodoC;

void insertarCircular(NodoC **cab, int x) {

NodoC *nuevo = (NodoC*)malloc(sizeof(NodoC));

nuevo->dato = x;

if (*cab == NULL) {

*cab = nuevo;
nuevo->sig = *cab;

} else {

NodoC *temp = *cab;

while (temp->sig != *cab) temp = temp->sig;

temp->sig = nuevo;

nuevo->sig = *cab;

// ----------------- LISTA DOBLEMENTE ENLAZADA -----------------

typedef struct NodoD {

int dato;

struct NodoD *sig, *ant;

} NodoD;

void insertarDoble(NodoD **cab, int x) {

NodoD *nuevo = (NodoD*)malloc(sizeof(NodoD));

nuevo->dato = x;

nuevo->sig = *cab;

nuevo->ant = NULL;

if (*cab != NULL) (*cab)->ant = nuevo;

*cab = nuevo;

// ----------------- RECURSIVIDAD -----------------

int factorial(int n) {

if (n <= 1) return 1;

return n * factorial(n - 1);

}
// ----------------- MAIN -----------------

int main() {

// Matriz (ejemplo de iteración)

int matriz[2][2] = {{1, 2}, {3, 4}};

printf("Matriz:\n");

for (int i = 0; i < 2; i++) { // iteración

for (int j = 0; j < 2; j++)

printf("%d ", matriz[i][j]);

printf("\n");

// Pila

Pila p = {.tope = -1};

push(&p, 10);

push(&p, 20);

printf("\nPop pila: %d\n", pop(&p));

// Cola

Cola c = {.frente = 0, .final = -1};

encolar(&c, 5);

encolar(&c, 15);

printf("Desencolar cola: %d\n", desencolar(&c));

// Cola circular

ColaCircular cc = {.frente = 0, .final = 0, .contador = 0};

encolarCircular(&cc, 100);

encolarCircular(&cc, 200);

printf("Desencolar cola circular: %d\n", desencolarCircular(&cc));


// Lista enlazada

Nodo *lista = NULL;

insertarLista(&lista, 1);

insertarLista(&lista, 2);

printf("Lista enlazada primer dato: %d\n", lista->dato);

// Lista enlazada circular

NodoC *listaC = NULL;

insertarCircular(&listaC, 7);

insertarCircular(&listaC, 8);

printf("Lista circular un dato: %d\n", listaC->dato);

// Lista doblemente enlazada

NodoD *listaD = NULL;

insertarDoble(&listaD, 50);

insertarDoble(&listaD, 60);

printf("Lista doble primer dato: %d\n", listaD->dato);

// Recursividad (factorial)

printf("\nFactorial de 5 = %d\n", factorial(5));

return 0;

También podría gustarte