Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
CompilerbauBlatt1
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Oscar Amaya Mohr
CompilerbauBlatt1
Commits
43202778
Commit
43202778
authored
2 years ago
by
Oscar Amaya Mohr
Browse files
Options
Downloads
Patches
Plain Diff
Replace stack.c
parent
4e3b6aa9
Branches
main
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
stack.c
+10
-47
10 additions, 47 deletions
stack.c
with
10 additions
and
47 deletions
stack.c
+
10
−
47
View file @
43202778
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
#include
<stdlib.h>
#include
<stdlib.h>
#include
<string.h>
#include
<string.h>
#include
<stdio.h>
#include
<stdio.h>
...
@@ -12,37 +9,25 @@ void die(char* msg) {
...
@@ -12,37 +9,25 @@ void die(char* msg) {
exit
(
EXIT_FAILURE
);
exit
(
EXIT_FAILURE
);
}
}
/* *** Strukturen *********************************************************** */
/**@brief Struktur des Stacks.
*/
typedef
struct
{
typedef
struct
{
size_t
size
;
size_t
size
;
size_t
capacity
;
size_t
capacity
;
int
*
data
;
int
*
data
;
}
IntStack
;
}
IntStack
;
/* *** öffentliche Schnittstelle ******************************************** */
/**@brief Initialisiert einen neuen Stack.
* @param self der zu initialisierende Stack
* @return 0, falls keine Fehler bei der Initialisierung aufgetreten sind,
* != 0, ansonsten
*/
int
stackInit
(
IntStack
*
self
)
{
int
stackInit
(
IntStack
*
self
)
{
self
->
size
=
0
;
self
->
size
=
0
;
self
->
capacity
=
INTSTACK_INIT_CAPACITY
;
self
->
capacity
=
INTSTACK_INIT_CAPACITY
;
self
->
data
=
malloc
(
self
->
capacity
*
sizeof
(
int
));
self
->
data
=
malloc
(
self
->
capacity
*
sizeof
(
int
));
return
self
->
data
?
0
:
-
1
;
return
self
->
data
?
0
:
-
1
;
}
}
/**@brief Gibt den Stack und alle assoziierten Strukturen frei.
// NOTE: Caller frees IntStack*, since in test there are automatic
* NOTE: Caller frees IntStack*, since in test there are automatic
// storage duration non malloc'ed unfreeable IntStacks
* storage duration non malloc'ed unfreeable IntStacks
* @param self der Stack
*/
void
stackRelease
(
IntStack
*
self
)
{
void
stackRelease
(
IntStack
*
self
)
{
free
(
self
->
data
);
if
(
self
)
free
(
self
->
data
);
}
}
void
stackResize
(
IntStack
*
self
,
size_t
new_capacity
)
{
void
stackResize
(
IntStack
*
self
,
size_t
new_capacity
)
{
...
@@ -50,12 +35,8 @@ void stackResize(IntStack *self, size_t new_capacity) {
...
@@ -50,12 +35,8 @@ void stackResize(IntStack *self, size_t new_capacity) {
self
->
data
=
realloc
(
self
->
data
,
self
->
capacity
*
sizeof
(
int
));
self
->
data
=
realloc
(
self
->
data
,
self
->
capacity
*
sizeof
(
int
));
}
}
/**@brief Legt einen Wert auf den intstack.
* @param self der intstack
* @param i der Wert
*/
void
stackPush
(
IntStack
*
self
,
int
i
)
{
void
stackPush
(
IntStack
*
self
,
int
i
)
{
self
->
size
++
;
self
->
size
+=
1
;
if
(
self
->
size
>=
self
->
capacity
)
if
(
self
->
size
>=
self
->
capacity
)
stackResize
(
self
,
2
*
self
->
capacity
);
stackResize
(
self
,
2
*
self
->
capacity
);
...
@@ -63,10 +44,6 @@ void stackPush(IntStack *self, int i) {
...
@@ -63,10 +44,6 @@ void stackPush(IntStack *self, int i) {
self
->
data
[
self
->
size
-
1
]
=
i
;
self
->
data
[
self
->
size
-
1
]
=
i
;
}
}
/**@brief Gibt das oberste Element des Stacks zurück.
* @param self der Stack
* @return das oberste Element
*/
int
stackTop
(
const
IntStack
*
self
)
{
int
stackTop
(
const
IntStack
*
self
)
{
if
(
!
self
->
size
)
{
if
(
!
self
->
size
)
{
stackRelease
((
IntStack
*
)
self
);
stackRelease
((
IntStack
*
)
self
);
...
@@ -76,10 +53,6 @@ int stackTop(const IntStack *self) {
...
@@ -76,10 +53,6 @@ int stackTop(const IntStack *self) {
return
self
->
data
[
self
->
size
-
1
];
return
self
->
data
[
self
->
size
-
1
];
}
}
/**@brief Entfernt und liefert das oberste Element des Stacks.
* @param self der Stack
* @return das oberste Element
*/
int
stackPop
(
IntStack
*
self
)
{
int
stackPop
(
IntStack
*
self
)
{
if
(
!
self
->
size
)
{
if
(
!
self
->
size
)
{
stackRelease
(
self
);
stackRelease
(
self
);
...
@@ -94,29 +67,19 @@ int stackPop(IntStack *self) {
...
@@ -94,29 +67,19 @@ int stackPop(IntStack *self) {
return
self
->
data
[
self
->
size
];
return
self
->
data
[
self
->
size
];
}
}
/**@brief Gibt zurück, ob der Stack leer ist.
* @param self der Stack
* @return 0, falls nicht leer,
!= 0, falls leer
*/
int
stackIsEmpty
(
const
IntStack
*
self
)
{
int
stackIsEmpty
(
const
IntStack
*
self
)
{
return
self
->
size
==
0
;
return
self
->
size
==
0
;
}
}
/**@brief Gibt den Inhalt des Stacks beginnend mit dem obersten Element auf der
* Standardausgabe aus.
* @param self der Stack
*/
void
stackPrint
(
const
IntStack
*
self
)
{
void
stackPrint
(
const
IntStack
*
self
)
{
printf
(
"top("
);
printf
(
"top("
);
for
(
int
i
=
(
int
)
self
->
size
-
1
;
i
>
0
;
i
--
)
if
(
self
->
size
)
{
printf
(
"%d, "
,
self
->
data
[
i
]);
for
(
size_t
i
=
self
->
size
-
1
;
i
>
0
;
i
--
)
printf
(
"%d, "
,
self
->
data
[
i
]);
if
(
self
->
size
>
0
)
printf
(
"%d"
,
self
->
data
[
0
]);
printf
(
"%d"
,
self
->
data
[
0
]);
}
printf
(
")bot
\n
"
);
printf
(
")bot
\n
"
);
}
}
#endif
/* STACK_H_INCLUDED */
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment