Skip to content

Instantly share code, notes, and snippets.

@chrdiller
Last active October 13, 2015 15:48
Show Gist options
  • Save chrdiller/4218734 to your computer and use it in GitHub Desktop.
Save chrdiller/4218734 to your computer and use it in GitHub Desktop.
Simple test of lists in C
#include <stdio.h>
#include <stdlib.h>
#define p printf
#define s scanf
struct node
{
long int value;
struct node *next;
};
typedef struct node listNode;
listNode root;
void initializeList();
void insertNodeTop(int);
void insertNodeBottom(int);
void deleteNode(int);
int size();
void printList();
int main()
{
p("\nDieses C-Programm dient zum Testen elementarer Listenfunktionen\n");
p("@author Christian Diller\n\n");
initializeList();
while(1) {
int v = 0;
p("Hauptmenue\n");
p("----------\n");
p("1 - Liste ausgeben\n");
p("2 - Groesse der Liste ausgeben\n");
p("3 - Ganze Zahl an den Anfang der Liste einfuegen\n");
p("4 - Ganze Zahl an das Ende der Liste einfuegen\n");
p("5 - Element aus der Liste loeschen\n");
p("----------\n");
p("Auswahl: ");
s("%d", &v);
switch(v) {
case 1:
printList(); break;
case 2:
p("Groesse der Liste: %d\n", size()); break;
case 3: {
int n;
p("Neues Listenelement (Ganze Zahl) eingeben: "); s("%d", &n);
insertNodeTop(n);
printList();
} break;
case 4: {
int n;
p("Neues Listenelement (Ganze Zahl) eingeben: "); s("%d", &n);
insertNodeBottom(n);
printList();
} break;
case 5: {
int n;
p("Nummer des zu loeschenden Elements eingeben: "); s("%d", &n);
deleteNode(n);
printList();
} break;
default:
p("Wert zwischen 1 und 4 eingeben!\n");
}
p("\n");
}
}
void initializeList()
{
root.value = -1;
root.next = 0;
}
void insertNodeTop(int value)
{
listNode *newElement = malloc(sizeof(listNode));
(*newElement).value = value;
(*newElement).next = root.next;
root.next = newElement;
}
void insertNodeBottom(int value)
{
listNode *newElement = malloc(sizeof(listNode));
(*newElement).value = value;
listNode *befIns = &root;
int s = size();
int i;
for(i = 1; i < s; i++)
befIns = (*befIns).next;
(*newElement).next = 0;
(*befIns).next = newElement;
}
void deleteNode(int position)
{
int i;
listNode *befDel = &root;
for(i = 1; i < position; i++)
befDel = (*befDel).next;
listNode *tmp = (*(*befDel).next).next;
free((*befDel).next);
(*befDel).next = tmp;
}
int size()
{
listNode *tmp = &root;
int i = 0;
while(tmp != 0) {
tmp = (*tmp).next;
i++;
}
return i;
}
void printList()
{
p("Folgende Liste ist gespeichert: \n");
listNode *tmp = &root;
int i = 0;
while(tmp != 0) {
p("[%d] %d\n", i, (*tmp).value);
tmp = (*tmp).next;
i++;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment