Linked list stack and queue

Discussion in 'C Programming' started by AMRaymo@gmail.com, Apr 12, 2005.

  1. Guest

    Can someone guide me in the right direction on how to enqueue and
    dequeue/pop and push within a linked list? I've figured out the basic
    idea, but getting the other options in it seems ot be a problem.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    struct info {
    char name[16];
    int age;
    struct info *next; // pointer to next data item in list
    } prsn;

    struct info *top; // establish start of list

    // proto types
    struct info *sort_store(struct info *new, struct info *top);
    void display(struct info *start);


    int main()
    { struct info *person, *sort_store();
    system("cls");
    printf("What would you like to do?\n");
    printf("1 - Push to the stack\n");
    printf("2 - Pop from the stack\n");
    printf("3 - Display the stack\n");
    printf("\n - Quit\n");
    system("cls");
    printf("What would you like to do?\n");
    printf("1 - Push to the stack\n");
    printf("2 - Pop from the stack\n");
    printf("3 - Display the stack\n");
    printf("\n0 - Quit\n");
    scanf("%i", &intChoice);


    case: 1
    (
    );break;

    case: 2
    (
    );break;
    case: 3
    (
    );break;
    case
    printf("\nEnter names and ages:\n");
    for (;;)
    {
    person = (struct info *) malloc(sizeof(prsn));
    if (!person)
    {
    puts("Stack is full. Cannot Push!\n\n");
    break;
    }
    printf("\nEnter name : ");
    scanf("%s",person->name);
    // flush the input stream in case of bad input
    fflush(stdin);
    // mimic an AND situation
    if (strlen(person->name) == 1)
    {
    if (person->name[0] == 'q') break;
    }
    printf("Enter age : ");
    scanf("%d",&person->age);
    // flush the input stream in case of bad input
    fflush(stdin);

    // store data and update top of list
    top = sort_store(person,top);
    }
    // display the sorted list from the top
    display(top);

    getchar(); // wait
    return 0;
    }

    //
    // insert new data to the list in sorted order
    //
    struct info *sort_store(struct info *new, struct info *top)
    {
    static struct info *last = NULL;
    struct info *old, *start;

    start = top;
    if (!last)
    {
    new->next = NULL;
    last = new;
    return (new);
    }
    old = NULL;
    while (top)
    {
    // sort by name in ascending order
    if (strcmp(top->name, new->name) < 0)
    {
    old = top;
    top = top->next;
    }
    else
    {
    if (old)
    {
    old->next = new;
    new->next = top;
    return (start);
    }
    new->next = top;
    return (new);
    }
    }
    last->next = new;
    new->next = NULL;
    last = new;
    return (start);
    }

    //
    // walk through the linked list and display the content
    //
    void display(struct info *start)
    {
    while (start)
    {
    printf(" [%s , %2d]", start->name, start->age);
    start = start->next;
    }
    printf("\n");
    }
    , Apr 12, 2005
    #1
    1. Advertising

  2. Darius Guest

    wrote:
    > Can someone guide me in the right direction on how to enqueue and
    > dequeue/pop and push within a linked list? I've figured out the

    basic
    > idea, but getting the other options in it seems ot be a problem.
    >
    > #include <stdio.h>
    > #include <stdlib.h>
    > #include <string.h>
    >
    > struct info {
    > char name[16];
    > int age;
    > struct info *next; // pointer to next data item in list
    > } prsn;
    >
    > struct info *top; // establish start of list
    >
    > // proto types
    > struct info *sort_store(struct info *new, struct info *top);
    > void display(struct info *start);
    >
    >
    > int main()
    > { struct info *person, *sort_store();
    > system("cls");
    > printf("What would you like to do?\n");
    > printf("1 - Push to the stack\n");
    > printf("2 - Pop from the stack\n");
    > printf("3 - Display the stack\n");
    > printf("\n - Quit\n");
    > system("cls");
    > printf("What would you like to do?\n");
    > printf("1 - Push to the stack\n");
    > printf("2 - Pop from the stack\n");
    > printf("3 - Display the stack\n");
    > printf("\n0 - Quit\n");
    > scanf("%i", &intChoice);
    >
    >
    > case: 1
    > (
    > );break;
    >
    > case: 2
    > (
    > );break;
    > case: 3
    > (
    > );break;
    > case
    > printf("\nEnter names and ages:\n");
    > for (;;)
    > {
    > person = (struct info *) malloc(sizeof(prsn));
    > if (!person)
    > {
    > puts("Stack is full. Cannot Push!\n\n");
    > break;
    > }
    > printf("\nEnter name : ");
    > scanf("%s",person->name);
    > // flush the input stream in case of bad input
    > fflush(stdin);
    > // mimic an AND situation
    > if (strlen(person->name) == 1)
    > {
    > if (person->name[0] == 'q') break;
    > }
    > printf("Enter age : ");
    > scanf("%d",&person->age);
    > // flush the input stream in case of bad input
    > fflush(stdin);
    >
    > // store data and update top of list
    > top = sort_store(person,top);
    > }
    > // display the sorted list from the top
    > display(top);
    >
    > getchar(); // wait
    > return 0;
    > }
    >
    > //
    > // insert new data to the list in sorted order
    > //
    > struct info *sort_store(struct info *new, struct info *top)
    > {
    > static struct info *last = NULL;
    > struct info *old, *start;
    >
    > start = top;
    > if (!last)
    > {
    > new->next = NULL;
    > last = new;
    > return (new);
    > }
    > old = NULL;
    > while (top)
    > {
    > // sort by name in ascending order
    > if (strcmp(top->name, new->name) < 0)
    > {
    > old = top;
    > top = top->next;
    > }
    > else
    > {
    > if (old)
    > {
    > old->next = new;
    > new->next = top;
    > return (start);
    > }
    > new->next = top;
    > return (new);
    > }
    > }
    > last->next = new;
    > new->next = NULL;
    > last = new;
    > return (start);
    > }
    >
    > //
    > // walk through the linked list and display the content
    > //
    > void display(struct info *start)
    > {
    > while (start)
    > {
    > printf(" [%s , %2d]", start->name, start->age);
    > start = start->next;
    > }
    > printf("\n");
    > }



    knuth vol 1
    Darius, Apr 12, 2005
    #2
    1. Advertising

  3. SM Ryan Guest

    wrote:
    # Can someone guide me in the right direction on how to enqueue and
    # dequeue/pop and push within a linked list? I've figured out the basic
    # idea, but getting the other options in it seems ot be a problem.

    typedef struct Cell Cell,*pCell;
    typedef struct List List;

    struct Cell {
    pCell next;
    ...
    };
    struct List {
    pCell first,last;
    };

    pCell newcell(void) {
    pCell x = malloc(sizeof(Cell));
    memset(x,0,sizeof(Cell));
    return x;
    }

    pCell push(List *list) {
    pCell x = newCell();
    x->next = list->first;
    if (!list->first) list->last = x;
    list->first = x;
    return x;
    }

    pCell pop(List *list) {
    if (list->first) {
    pCell x = list->first;
    list->first = x->next;
    return x;
    }else {
    return 0;
    }
    }

    pCell top(List *list) {
    return list->first;
    }

    #define empty(list) (!top(list))

    pCell append(List *list) {
    pCell x = newcell();
    if (list->first) list->first = x;
    else list->last->next = x;
    list->last = x;
    return x;
    }

    pCell bottom(List *list) {
    return list->first ? list->last : 0;
    }

    --
    SM Ryan http://www.rawbw.com/~wyrmwif/
    I think that's kinda of personal; I don't think I should answer that.
    SM Ryan, Apr 13, 2005
    #3
  4. Default User Guest

    Darius wrote:

    [HUGE snip]

    > knuth vol 1



    Is there some reason you felt the need to quote over 100 lines just to
    add on rather cryptic statement?




    Brian
    Default User, Apr 13, 2005
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Kay

    Linked list and queue

    Kay, Aug 30, 2004, in forum: C++
    Replies:
    2
    Views:
    409
    Karl Heinz Buchegger
    Aug 31, 2004
  2. Russell Warren

    Is Queue.Queue.queue.clear() thread-safe?

    Russell Warren, Jun 22, 2006, in forum: Python
    Replies:
    4
    Views:
    654
    Russell Warren
    Jun 27, 2006
  3. fool
    Replies:
    14
    Views:
    483
    Barry Schwarz
    Jul 3, 2006
  4. joshd
    Replies:
    12
    Views:
    649
    John Carson
    Oct 2, 2006
  5. Kris
    Replies:
    0
    Views:
    428
Loading...

Share This Page