-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathvoidstack.c
122 lines (109 loc) · 1.78 KB
/
voidstack.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <stdlib.h>
#include <stdio.h>
typedef struct voidnode {
struct voidnode * next;
void * data;
} VoidNode;
void removeFirst(VoidNode ** root)
{
if(*root)
{
VoidNode * tmp = (*root)->next;
free(*root);
*root = tmp;
}
}
void removeLast(VoidNode ** root)
{
if(*root)
{
if(!(*root)->next)
{
free(*root);
*root = NULL;
}
else
{
VoidNode * prev = *root;
VoidNode * next = (*root)->next;
while(next->next)
{
prev = prev->next;
next = next->next;
}
free(next);
next = NULL;
prev->next = NULL;
}
}
}
void addLast(VoidNode ** root, void * data)
{
VoidNode *add = (VoidNode *) malloc(sizeof(VoidNode));
if(add)
{
add->data = data;
add->next = NULL;
VoidNode * tmp = *root;
if(!tmp)
{
*root = add;
}
while(tmp->next)
{
tmp = tmp->next;
}
tmp->next = add;
}
}
void addFirst(VoidNode ** root, void * data)
{
VoidNode *add = (VoidNode *) malloc(sizeof(VoidNode));
if(add)
{
add->data = data;
add->next = NULL;
if(*root)
{
add->next = *root;
}
*root = add;
}
}
void printIntList(VoidNode ** root)
{
VoidNode * temp = *root;
while(temp)
{
printf("%d\n", (int) temp->data);
temp = temp->next;
}
}
void printCharList(VoidNode ** root)
{
VoidNode * temp = *root;
printf("[");
while(temp)
{
printf("%s", (char *) temp->data);
temp = temp->next;
if(temp){
printf(", ");
} else {
printf("]");
}
}
}
/*
int main()
{
VoidNode * root = NULL;
addFirst(&root, (void *) 5);
addFirst(&root, (void *) 52);
removeFirst(&root);
addLast(&root, (void *) 14);
addLast(&root, (void *) 8);
printIntList(&root);
return 0;
}
*/