//list.cpp
#include "list.h"
#include <stdlib.h>
#include <stdio.h>
void initList(List *list) {
list->first = NULL;
}
void destroyList(List *list) {
Element *e = list->first;
Element *next = list->first;
list->first = NULL;
while (e) {
next = e->next; // e->next wird zwischengespeichert
e->next = NULL; // und bleibt erreichbar, nachdem e
free(e); // freigegeben wurde.
e = next;
}
}
void prependToList(List *list, int i) {
Element *e = malloc(sizeof(Element));
e->value = i;
e->next = list->first;
list->first = e;
}
void printList(List *list) {
Element *e;
for (e = list->first; e != NULL; e = e->next) {
printf("%i ", e->value);
}
printf("
");
}
size_t sizeOfList(List *list) {
Element *e;
size_t count = 0;
// Iterationsbedingung ist wahr, wenn e != NULL
for (e = list->first; e; e = e->next) {
count++;
}
return count;
}
void appendToList(List *list,int i) {
Element *e;
e = list->first;
if(e==NULL){
e=malloc(sizeof(Element));
e->value=i;
e->next = NULL;
list->first=e;
return;
}
while(e->next != NULL)
{
e = e->next;
}
e->next=malloc(sizeof(Element));
e->next->value = i;
e->next->next=NULL;
}
int removeFirst(List *list) {
Element *e;
int temp;
e = list->first;
if(e == NULL){
printf("List is NULL!
");
return 0;
}
temp=e->value;
list->first = list->first->next;
free(e);
return temp;
}
int removeLast(List *list) {
Element *e;
int temp;
e = list->first;
if(e == NULL){
printf("List is NULL!
");
return 0;
}
if(e->next== NULL)
{
return removeFirst(list);
}
while(e->next->next != NULL)
{
e = e->next;
}
temp=e->next->value;
free(e->next);
e->next = NULL;
return temp;
}
void insertAfterPosition(List *list, size_t pos, int i) {
Element *e,*g;
e = list->first;
if(e == NULL){
printf("List is NULL!
");
return;
}
if(pos>sizeOfList(list))//new add
{
printf("pos is larger than size of list!
");
return;
}
size_t j;
for (j=0; j<pos-1; j++)
{
e = e->next;
}
g=malloc(sizeof(Element));
g->value=i;
g->next=e->next;
e->next=g;
}
int removeAfterPosition(List *list,size_t pos){
Element *e,*g;
int temp;
e = list->first;
if(e == NULL){
printf("List is NULL!
");
return 0;
}
if(pos>sizeOfList(list))//new add
{
printf("pos is larger than size of list!
");
return 0;
}
size_t j;
for (j=0; j<pos-1; j++)
{
e = e->next;
}
g=e->next;
temp=g->value;
e->next=e->next->next;
free(g);
return temp;
}
void insertSorted(List *list, int i) {
Element *e,*g;
e = list->first;
if(e == NULL){
printf("List is NULL!
");
return;
}
if(list->first->next== NULL)
{
prependToList(list, i);
sortList(list);
return;
}
for(e = list->first; e->next != NULL; e = e->next){
if((e->value)>(e->next->value)){
sortList(list);
break;
}
}
g=malloc(sizeof(Element));
g->value=i;
if(i<=list->first->value)//new add
{
prependToList(list, i);
return;
}
for(e = list->first; e->next != NULL; e = e->next){
if((e->value<=i)&&(e->next->value>=i)){
g->next=e->next;
e->next=g;
break;
}
}
if(e->next == NULL)//new add
{
e->next=g;
g->next=NULL;
}
}
void sortList( List *list) {
Element *e;
int temp;
size_t j;
size_t size=sizeOfList(list);
for (j = size - 1; j > 0; j--)
{
size_t p = 0;
for(e = list->first; e->next != NULL; e = e->next){
p++;
if (p > j) break;
if((e->value)>(e->next->value)){
temp=e->value;
(e->value)=(e->next->value);
(e->next->value)=temp;
}
}
}
}
//list.h
#include <stddef.h> // enthält Definition von size_t
struct Element {
int value;
struct Element *next;
};
struct List {
struct Element *first;
};
typedef struct List List;
typedef struct Element Element;
void initList(List* list);
void destroyList(List *list);
int removeFirst(List *list);
void appendToList(List *list,int i);
void printList(List *list);
int removeLast(List *list);
size_t sizeOfList(List *list);
void insertAfterPosition(List *list, size_t pos, int i);
void prependToList(List *list, int value);
void insertSorted(List *list, int i);
void sortList( List *list);
int removeAfterPosition(List *list,size_t pos);
//prog.cpp
#include "list.h"
#include <stdio.h>
int main() {
struct List list;
int appnum,insertpos,removepos,insertnum,insertsortnum;
initList(&list);
int i = 0;
for (i=5; i < 15; ++i) {
prependToList(&list, i);
}
printList(&list);
printf("Please input append number:");
scanf("%d",&appnum);
printf("Size of list: %zu
", sizeOfList(&list));
appendToList(&list, appnum);
printf("appendToList:
");
printList(&list);
printf("Size of list: %zu
", sizeOfList(&list));
removeFirst(&list);
printf("removeFirst:
");
printList(&list);
printf("Size of list: %zu
", sizeOfList(&list));
removeLast(&list);
printf("removeLast:
");
printList(&list);
printf("Size of list: %zu
", sizeOfList(&list));
printf("Please input insert position and number:");
scanf("%d %d",&insertpos,&insertnum);
insertAfterPosition(&list,insertpos,insertnum);
printf("insertAfterPosition %d:
",insertpos);
printList(&list);
printf("Please input remove position:");
scanf("%d",&removepos);
removeAfterPosition(&list,removepos);
printf("removeAfterPosition %d:
",removepos);
printList(&list);
printf("Please input insertsorted number:");
scanf("%d",&insertsortnum);
printf("Size of list: %zu
", sizeOfList(&list));
insertSorted(&list,insertsortnum);
printf("insertSorted:
");
printList(&list);
printf("Size of list: %zu
", sizeOfList(&list));
destroyList(&list);
printf("Size of list: %zu
", sizeOfList(&list));
}