新浪博客

链式栈的基本操作(C语言实现)

2016-02-28 15:52阅读:
  1. #include 'stdafx.h'
  2. #include
  3. #define OK 1
  4. #define ERROR 0
  5. #define TRUE 1
  6. #define FALSE 0
  7. #define MAXSIZE 20
  8. typedef int Status;
  9. typedef int SElemType;
  • typedef struct StackNode
  • {
  • SElemType data;
  • struct StackNode *next;
  • }StackNode,*LinkStackPtr;
  • typedef struct LinkStack
  • {
  • LinkStackPtr top;
  • int count;
  • }LinkStack;
  • Status visit(SElemType c)
  • {
  • printf('%d ',c);
  • return OK;
  • }
  • Status InitStack(LinkStack *S)
  • {
  • S->top = (LinkStackPtr)malloc(sizeof(StackNode));
  • if(!S->top)
  • {
  • return ERROR;
  • }
  • S->top = NULL;
  • S->count = 0;
  • return OK;
  • }
  • Status ClearStack(LinkStack *S)
  • {
  • LinkStackPtr p,q;
  • p = S->top;
  • while(p)
  • {
  • q = p;
  • p = p->next;
  • free(q);
  • }
  • S->count=0;
  • return OK;
  • }
  • Status IsEmptyStack(LinkStack S)
  • {
  • if (S.count == 0)
  • {
  • return TRUE;
  • }
  • else
  • {
  • return FALSE;
  • }
  • }
  • int GetStackLength(LinkStack S)
  • {
  • return S.count;
  • }
  • Status GetTopElem(LinkStack S,SElemType *e)
  • {
  • if (S.top == NULL)
  • {
  • return ERROR;
  • }
  • else
  • {
  • *e = S.top->data;
  • }
  • return OK;
  • }
  • Status Push(LinkStack *S,SElemType e)
  • {
  • LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
  • if (!s)
  • {
  • return ERROR;
  • }
  • s->data = e;
  • s->next = S->top;
  • S->top = s;
  • S->count++;
  • return OK;
  • }
  • Status Pop(LinkStack *S,SElemType *e)
  • {
  • LinkStackPtr p;
  • if(IsEmptyStack(*S))
  • {
  • return ERROR;
  • }
  • *e = S->top->data;
  • p = S->top;
  • S->top = S->top->next;
  • free(p);
  • S->count--;
  • return OK;
  • }
  • Status StackTraverse(LinkStack S)
  • {
  • LinkStackPtr p;
  • p=S.top;
  • while(p)
  • {
  • visit(p->data);
  • p=p->next;
  • }
  • printf('');
  • return

我的更多文章

下载客户端阅读体验更佳

APP专享