Ejemplo n.º 1
0
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include "functions.h"
int stack_size = 0; /* stack full size */
int main()
{
	int *A; /* Stack - massive pointer */
	int N = -1; /* stack top pointer */
	int opt; /* switch options */
	int ext_data, add_data; /* extracting and adding data */
	printf("Please, enter stack size : ");
	scanf("%d", &stack_size);
	A = create_stack(stack_size);
	printf("\n");
	while(1)
	{
		interface();
		opt = getchar();
		switch(opt)
		{
			case 'e': ext_data = stack_pop(A,&N); break;
			case 'a': 	printf("Enter adding data:\n");
						scanf("%d", &add_data);
						stack_push(A, &N, add_data);
						break;
			case 'd': N = delete_stack(A); break;
			case 'f': 	printf("Free place in stack: %d\n", free_place(N, stack_size));
						break;
			case 'q': if(N != -2)
						printf("Please, make free stack\n");
					 else
					 	exit(1);
						break;
		}
	}
return 0;
}
Ejemplo n.º 2
0
/**
 * @brief
 *		free_resource_resv - free a resource resv strcture an all of it's ptrs
 *
 * @param[in]	resresv	-	resource_resv to free
 *
 * @return	nothing
 *
 */
void
free_resource_resv(resource_resv *resresv)
{
	if (resresv == NULL)
		return;

	if (resresv->name != NULL)
		free(resresv->name);

	if (resresv->user != NULL)
		free(resresv->user);

	if (resresv->group != NULL)
		free(resresv->group);

	if (resresv->project != NULL)
		free(resresv->project);

	if (resresv->nodepart_name != NULL)
		free(resresv->nodepart_name);

	if (resresv->select != NULL)
		free_selspec(resresv->select);

	if (resresv->execselect != NULL)
		free_selspec(resresv->execselect);

	if (resresv->place_spec != NULL)
		free_place(resresv->place_spec);

	if (resresv->resreq != NULL)
		free_resource_req_list(resresv->resreq);

	if (resresv->ninfo_arr != NULL)
		free(resresv->ninfo_arr);

	if (resresv->nspec_arr != NULL)
		free_nspecs(resresv->nspec_arr);

	if (resresv->job != NULL)
		free_job_info(resresv->job);

	if (resresv->resv != NULL)
		free_resv_info(resresv->resv);

	if (resresv->aoename != NULL)
		free(resresv->aoename);

	if (resresv->eoename != NULL)
		free(resresv->eoename);

	if (resresv->node_set_str != NULL)
		free_string_array(resresv->node_set_str);

	if (resresv->node_set != NULL)
		free(resresv->node_set);

	free(resresv);
}
Ejemplo n.º 3
0
Coord small_path_search(Coord c1, Coord c2) {
    int steps = 10;
    auto dist = [](Coord c, Coord cc) { return abs(c.x - cc.x) + abs(c.y - cc.y); };

    std::vector<Coord> stack;
    std::map<Coord, int> visited;

    stack.push_back(c1);

    std::vector<Coord> childs;
    while(steps-- && stack.size()) {
        childs.clear();
        Coord c = stack.back();
        stack.pop_back();
        if (c == c2) {
            break;
        }
        visited[c] = steps;
        Coord cc = c.move(Direction::Left);
        if (free_place(cc) && visited.find(cc) == visited.end()) {
            childs.push_back(cc);
        }
        cc = c.move(Direction::Right);
        if (free_place(cc) && visited.find(cc) == visited.end()) {
            childs.push_back(cc);
        }
        cc = c.move(Direction::Up);
        if (free_place(cc) && visited.find(cc) == visited.end()) {
            childs.push_back(cc);
        }
        cc = c.move(Direction::Down);
        if (free_place(cc) && visited.find(cc) == visited.end()) {
            childs.push_back(cc);
        }
        std::sort(childs.begin(), childs.end(), [&](Coord c, Coord cc) { return dist(c2, c) > dist(c2, cc); });
        for (auto ch : childs) { stack.push_back(ch); }
    }

    std::pair<Coord, int> min = std::make_pair(c1, 100);
    for(auto v : visited) {
        if (!(v.first == c1) && can_atack(v.first, c1) && min.second > v.second) {
            min = v;
        }
    }
    return min.first;
}