Last active
October 13, 2015 15:48
-
-
Save chrdiller/4218734 to your computer and use it in GitHub Desktop.
Simple test of lists in C
This file contains 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 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