Beispiel #1
0
/* return 0: success, return -1: fail, e.g., wrong id */
int remove_StudentList (StudentList* slist, int id) {
	Node *p;
	if (getNode_List(slist -> list, id)){
		p = getNode_List(slist -> list, id);
		remove_List(slist -> list, p);
		slist -> len --;
		return 0;
	}
	else
		return -1;
}
Beispiel #2
0
/* change key of (*node_p) into (keyval) */
void setKey_List (List* list_p, Node* node_p, int keyval) {
	Node *p;
	if (!(*list_p -> head -> key > *node_p -> key) || (*list_p -> tail -> key < *node_p -> key)){
		p = search_List(list_p, *node_p -> key);
		if (p -> key == node_p -> key){
			remove_List(list_p, node_p);
			*p -> key = keyval;
			insert_List(list_p, p-> key, p -> item);
		}
	}
}
Beispiel #3
0
Timer *remove_Timer(Timer **queue, Timer *t) {
	if (queue == NULL || t == NULL)
		return NULL;

	if (*queue == NULL)
		return t;

	if (t->sleeptime > 0 && t->next != NULL)
		t->next->sleeptime += t->sleeptime;

	return (Timer *)remove_List(queue, t);
}
Beispiel #4
0
ListType *remove_Queue(QueueType *q, void *l) {
ListType *ret;

	if (q == NULL || l == NULL)
		return NULL;

	if (q->head == (ListType *)l)
		q->head = q->head->prev;

	if ((ret = remove_List(&q->tail, (ListType *)l)) != NULL) {
		q->count--;
		if (q->count < 0) {
			q->count = 0;
			q->head = q->tail = NULL;
		}
	}
	return ret;
}
Beispiel #5
0
int main (int argc, char *const* argv) {

        MyRec element;                  /* to store in the stack */
        MyRec * retval;                 /* to retrieve from the stack */
        Stack * main_stack;             /* the list/stack to test */
        int option;                    /* each command line option */
        long command;                   /* stack command entered by user */
        long status;                    /* return status of stack functions */

        /* initialize debug states */
        set_debug_off();

        /* check command line options for debug display */
        while ((option = getopt (argc, argv, "x")) != EOF) {

                switch (option) {
                        case 'x': set_debug_on(); break;
                }
        }

        /* allocate and initialize */
        main_stack = new_Stack(copy_MyRec, delete_MyRec, write_MyRec);
        
        while (1) {
                command = 0;    /* initialize command, need for loops */
                writeline ("\nThe commands are:\n");
                writeline ("    is(e)mpty, ");
                writeline ("(i)nsert, ");
                writeline ("(p)op, ");
                newline ();
                writeline ("    (a)dvance pre, advance (n)ext, ");
                newline ();
                writeline ("    (r)emove, ");
                writeline ("(t)op, ");
                writeline ("p(u)sh, (v)iew, ");
                newline ();
                writeline ("    (w)rite, (W)rite_reverse,");
                newline ();

                writeline ("\nPlease enter a command:  ");
                command = fgetc (stdin);
                if (command == EOF)     /* are we done? */
                        break;
                clrbuf (command);       /* get rid of extra characters */

                switch (command) {      /* process commands */
                case 'a':               /* advance pre */
                        advance_pre_List (main_stack);
                        break;

                case 'n':               /* advance next */
                        advance_next_List (main_stack);
                        break;

                case 'e':               /* isempty */
                        if (isempty_Stack (main_stack))
                                writeline ("\nStack is empty.");
                        else
                                writeline ("\nStack is not empty.");
                        break;

                case 'i':               /* insert */
                        writeline (
                        "\nPlease enter a number to insert into list:  ");
                        element.xxx = decin ();
                        clrbuf (0);     /* get rid of extra characters */
                        status = insert (main_stack, &element, from_where ());
                        if (! status)
                                fprintf (stderr,
                                "\nWARNING:  insert FAILED\n");
                        break;


                case 'p':               /* pop */
                        retval = (MyRec *) pop (main_stack);
                        if (! retval)
                                fprintf (stderr,
                                        "\nWARNING:  pop FAILED\n");
                        else {
                                element = *retval;
                                writeline (
                                        "\nNumber popped from the stack is:  ");
                                write_MyRec (&element, stdout);
                                delete_MyRec (&retval);
                        }
                        break;

                case 'r':               /* remove */
                        retval = 
                        (MyRec *) remove_List (main_stack, from_where ());
                        if (! retval)
                                fprintf (stderr,
                                "\nWARNING:  remove FAILED\n");
                        else {
                                element = *retval;
                                writeline (
                                "\nNumber removed from list is:  ");
                                write_MyRec (&element, stdout);
                                delete_MyRec (&retval);
                        }
                        break;

                case 't':               /* top */
                        retval = (MyRec *) top (main_stack);
                        if (! retval)
                                fprintf (stderr,
                                        "\nWARNING:  top FAILED\n");
                        else {
                                element = *retval;
                                writeline (
                                        "\nNumber at top of the stack is:  ");
                                write_MyRec (&element, stdout);
                        }
                        break;

                case 'u':               /* push */
                        writeline (
                                "\nPlease enter a number to push to stack:  ");
                        element.xxx = decin ();
                        clrbuf (0);     /* get rid of extra characters */
                        status = push (main_stack, &element);
                        if (! status)
                                fprintf (stderr,
                                        "\nWARNING:  push FAILED\n");
                        break;

                case 'v':               /* view */
                        retval = (MyRec *) view (main_stack, from_where ());
                        if (! retval)
                                fprintf (stderr,
                                        "\nWARNING:  view FAILED\n");
                        else {
                                element = *retval;
                                writeline (
                                "\nNumber viewed from the list is:  ");
                                write_MyRec (&element, stdout);
                        }
                        break;

                case 'w':               /* write */
                        writeline ("\nThe Stack contains:\n");
                        write_Stack (main_stack, stderr);
                        newline ();
                        break;

                case 'W':               /* write */
                        writeline ("\nThe Stack contains (in reverse):\n");
                        write_reverse_List (main_stack, stderr);
                        newline ();
                        break;
                }
        }

        delete_Stack (&main_stack);     /* deallocate stack */
        newline ();
        return 0;
}
Beispiel #6
0
/* free every dynamic memory in (*list_p) */
void free_List (List* list_p) {
	while (list_p -> len != 0)
		list_p -> len--;
		remove_List(list_p, list_p -> head);
	free(list_p);
}