Stack with linked list

Source: Internet
Author: User

I. header files:

#ifndef _STACK_LINK_H_  #define _STACK_LINK_H_    struct stack_record;  typedef struct stack_record* stack;  typedef int elementType;  struct link_node;  typedef struct link_node node;    int IsEmpty(stack s);  int IsFull(stack s);  stack creatStack(int maxElement);  void disposeStack(stack s);  void makeEmpty(stack s);  void pushElement(elementType x,stack s);  elementType Top(stack s);  void popElement(stack s);  elementType topAndpop(stack s);    #define EMPTY 0  #define MINISIZE (5)    struct stack_record  {      int capacity;      int size;      node *item;   };    struct link_node  {      elementType data;      node *next;  };    #endif  

 

II. c file:
#include <stdio.h>  #include <stdlib.h>  #include "stack_link.h"      #define MAXSIZE 100    int IsEmpty(stack s)  {      return s->size == 0;  }    int IsFull(stack s)  {      return s->size == s->capacity;   }    stack creatStack(int maxElement)  {      stack s;      s = (stack)malloc(sizeof(struct stack_record));      if(s == NULL)      {      printf("the stack alloca error\n");      exit(-1);      }        s->capacity = MAXSIZE;      s->item = NULL;      s->size = 0;            return s;  }      void disposeStack(stack s)  {      if(s)      {      if(s->size)          makeEmpty(s);            free(s);      }  }    void makeEmpty(stack s)  {      if(s)      {      while(s->size)      {          popElement(s);      }      }  }    void pushElement(elementType x,stack s)  {      if(s)      {      if(IsFull(s))          return;                node *ptr = (node *)malloc(sizeof(node));      if(NULL == ptr)      {          printf("the node alloc is error\n");          exit(-2);      }            ptr->data = x;      ptr->next = s->item;      s->item = ptr;      s->size++;      }  }    elementType Top(stack s)  {      if(s)      {      if(IsEmpty(s))      {          printf("the stack is empty\n");          exit(-3);      }              return s->item->data;      }  }    void popElement(stack s)  {      if(IsEmpty(s) )      {      printf("the stack is empty\n");      exit(-4);      }        node *ptr = NULL;      ptr = s->item->next;      free(s->item);      s->item = ptr;      s->size--;  }    elementType topAndpop(stack s)  {      if(s)      {      if(IsEmpty(s))      {          printf("the stack is empty\n");          exit(-5);      }        elementType x;      x = Top(s);      popElement(s);      return x;      }  }        int main(int argc,char *argv[])  {      stack s;            s = creatStack(10);      int i = 0;      elementType x;      while(++i <= 10)      {      pushElement(i,s);      printf("the stack size is %d\n",s->size);      x = Top(s);      printf("the stack top is %d\n",x);      }        while(s->size)      {      x = topAndpop(s);      printf("the top stack is %d\n",x);      sleep(1);      }        disposeStack(s);        return 0;  }  

 

3. Print the output:
the stack size is 1  the stack top is 1  the stack size is 2  the stack top is 2  the stack size is 3  the stack top is 3  the stack size is 4  the stack top is 4  the stack size is 5  the stack top is 5  the stack size is 6  the stack top is 6  the stack size is 7  the stack top is 7  the stack size is 8  the stack top is 8  the stack size is 9  the stack top is 9  the stack size is 10  the stack top is 10  the top stack is 10  the top stack is 9  the top stack is 8  the top stack is 7  the top stack is 6  the top stack is 5  the top stack is 4  the top stack is 3  the top stack is 2  the top stack is 1  

 

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.