This commit is contained in:
parent
a57e112b89
commit
c8971cb204
|
@ -0,0 +1,103 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "stdlib.h"
|
||||||
|
|
||||||
|
typedef int BOOL;
|
||||||
|
#define TRUE 1
|
||||||
|
#define FALSE 0
|
||||||
|
|
||||||
|
typedef struct node
|
||||||
|
{
|
||||||
|
int value;
|
||||||
|
struct node *prev;
|
||||||
|
} Node;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int value;
|
||||||
|
BOOL flag;
|
||||||
|
} ListValue;
|
||||||
|
|
||||||
|
static Node* HEAD;
|
||||||
|
static Node* TAIL;
|
||||||
|
|
||||||
|
static int LENGTH = 0;
|
||||||
|
|
||||||
|
// O(1) operation, no growth by input
|
||||||
|
BOOL push(int value)
|
||||||
|
{
|
||||||
|
Node* new_head = malloc(sizeof(Node));
|
||||||
|
if (new_head == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
new_head->value = value;
|
||||||
|
new_head->prev = HEAD;
|
||||||
|
|
||||||
|
if (HEAD == NULL)
|
||||||
|
TAIL = new_head;
|
||||||
|
|
||||||
|
HEAD = new_head;
|
||||||
|
++LENGTH;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// O(1) operation, no growth by input
|
||||||
|
ListValue pop()
|
||||||
|
{
|
||||||
|
ListValue value = { 0, FALSE };
|
||||||
|
Node* iterator = HEAD;
|
||||||
|
if (iterator == NULL)
|
||||||
|
return value;
|
||||||
|
|
||||||
|
if (HEAD != TAIL)
|
||||||
|
{
|
||||||
|
HEAD = iterator->prev;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HEAD = NULL;
|
||||||
|
TAIL = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
value.value = iterator->value;
|
||||||
|
value.flag = TRUE;
|
||||||
|
|
||||||
|
free(iterator);
|
||||||
|
iterator = NULL;
|
||||||
|
|
||||||
|
--LENGTH;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// O(1) operation, no growth by input
|
||||||
|
ListValue peek()
|
||||||
|
{
|
||||||
|
ListValue value = { 0, FALSE };
|
||||||
|
Node* iterator = HEAD;
|
||||||
|
if (iterator == NULL)
|
||||||
|
return value;
|
||||||
|
|
||||||
|
value.value = iterator->value;
|
||||||
|
value.flag = TRUE;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
push(5);
|
||||||
|
push(22);
|
||||||
|
push(66);
|
||||||
|
push(122);
|
||||||
|
push(9);
|
||||||
|
|
||||||
|
printf("peek: %d\n", peek().value);
|
||||||
|
|
||||||
|
pop();
|
||||||
|
|
||||||
|
printf("peek: %d\n", peek().value);
|
||||||
|
|
||||||
|
pop();
|
||||||
|
|
||||||
|
printf("peek: %d\n", peek().value);
|
||||||
|
}
|
Loading…
Reference in New Issue