Gamestudio Links
Zorro Links
Newest Posts
Zorro 2.70
by jcl. 09/29/25 09:24
optimize global parameters SOLVED
by dBc. 09/27/25 17:07
ZorroGPT
by TipmyPip. 09/27/25 10:05
assetHistory one candle shift
by jcl. 09/21/25 11:36
Plugins update
by Grant. 09/17/25 16:28
AUM Magazine
Latest Screens
Rocker`s Revenge
Stug 3 Stormartillery
Iljuschin 2
Galactic Strike X
Who's Online Now
5 registered members (Dico, AndrewAMD, TipmyPip, NewbieZorro, Grant), 15,791 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
krishna, DrissB, James168, Ed_Love, xtns
19168 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
stack or queue in lite-c #340136
09/01/10 04:26
09/01/10 04:26
Joined: Jan 2010
Posts: 23
D
Darkmax Offline OP
Newbie
Darkmax  Offline OP
Newbie
D

Joined: Jan 2010
Posts: 23
Sorry for my noobie question but i didn't find this on the forums and i just wanna know if there is a class already to implement a stack or queue or i have to do it my self?

Re: stack or queue in lite-c [Re: Darkmax] #340138
09/01/10 06:19
09/01/10 06:19
Joined: Sep 2007
Posts: 62
Germany
B
bodden Offline
Junior Member
bodden  Offline
Junior Member
B

Joined: Sep 2007
Posts: 62
Germany
there are no classes in liteC as it is not object oriented. As far as I know, there also is nothing implemented for handling stacks or queues.

Re: stack or queue in lite-c [Re: bodden] #340145
09/01/10 10:28
09/01/10 10:28
Joined: Dec 2008
Posts: 271
Saturnus Offline
Member
Saturnus  Offline
Member

Joined: Dec 2008
Posts: 271
As bodden already said there aren't pre-implemented data structures like stacks or queues.

But it's pretty easy to do it yourself:

queue (untested)
Code:
typedef void* QUEUE_DATA;

typedef struct QUEUE_NODE
{
	struct QUEUE_NODE *nextNode;
	QUEUE_DATA data;
} QUEUE_NODE;

typedef struct
{
	QUEUE_ELEM *firstNode, *lastNode;
	int count;
} QUEUE;

void queue_clear(QUEUE *self)
{
	QUEUE_NODE *node = self->firstNode;
	
	while (node)
	{
		QUEUE_NODE *next_node = node->next;
		sys_free(node);
		node = next_node;
	}
}

QUEUE *queue_create()
{
	return sys_malloc(sizeof(QUEUE));
}

void queue_destroy(QUEUE *self)
{
	queue_clear(self);
	sys_free(self);
}

BOOL queue_empty(QUEUE *self)
{
	return self->count == 0;
}

QUEUE_DATA queue_front(QUEUE *self)
{
	if (queue_empty(self))
		return 0;
	
	return self->firstNode->data;
}

QUEUE_DATA queue_pop(QUEUE *self)
{
	if (queue_empty(self))
		return 0;
	
	QUEUE_DATA tmp_data = self->firstNode->data;
	QUEUE_NODE *popped_node = self->firstNode;
	self->firstNode = self->firstNode->nextNode;
	sys_free(popped_node);
	self->count--;
	return tmp_data;
}

void queue_push(QUEUE *self, QUEUE_DATA data)
{
	QUEUE_NODE *node = sys_malloc(sizeof(QUEUE_NODE));

	if (self->lastNode)
		self->lastNode->nextNode = node;
	else
		self->firstNode = node;
	
	self->lastNode = node;
	self->count++;
}



stack (untested)
Code:
typedef void STACK_TYPE;

typedef struct
{
	STACK_TYPE *data;
	int size, count;
} STACK;

void stack_clear(STACK *self)
{
	self->count = 0;
}

STACK *stack_create(int max_size)
{
	STACK *self = sys_malloc(sizeof(STACK));
	self->data = sys_malloc(max_size * sizeof(STACK_TYPE));
	self->size = max_size;
	return self;
}

void stack_destroy(STACK *self)
{
	sys_free(self->data);
	sys_free(self);
}

BOOL stack_empty(STACK *self)
{
	return self->count == 0;
}

void stack_push(STACK *self, STACK_DATA data)
{
	if (self->count == self->size)
		return;
	
	(self->data)[self->count] = data;
	self->count++;
}

STACK_DATA stack_pop(STACK *self)
{
	if (stack_empty(self))
		return 0;
	
	self->count--;
	return (self->data)[self->count];
}

STACK_DATA stack_top(STACK *self)
{
	if (stack_empty(self))
		return 0;
	
	return (self->data)[self->count - 1];
}



Re: stack or queue in lite-c [Re: Saturnus] #340151
09/01/10 11:52
09/01/10 11:52
Joined: Feb 2006
Posts: 1,011
Germany
pegamode Offline
Serious User
pegamode  Offline
Serious User

Joined: Feb 2006
Posts: 1,011
Germany
You can also use my GSVector (http://www.opserver.de/wiki/index.php/Plugins#GSVector_DLL) to build a queue or scheduler.

Regards,
Pegamode.


Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1