From 12553c0b9efdbdee04bd8a244368bc9a668d73e0 Mon Sep 17 00:00:00 2001 From: Xu Bai <1373953675@qq.com> Date: Mon, 1 Jul 2019 21:39:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=93=BE=E6=A0=88=E5=88=9D=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _02.栈与队列/03链栈_LinkStack.c | 144 ++++++++++++++++++++++++++++++++ _02.栈与队列/_c.链栈.c | 48 +++++++++++ 2 files changed, 192 insertions(+) create mode 100644 _02.栈与队列/03链栈_LinkStack.c create mode 100644 _02.栈与队列/_c.链栈.c diff --git a/_02.栈与队列/03链栈_LinkStack.c b/_02.栈与队列/03链栈_LinkStack.c new file mode 100644 index 0000000..122750f --- /dev/null +++ b/_02.栈与队列/03链栈_LinkStack.c @@ -0,0 +1,144 @@ +#include "stdio.h" +#include "stdlib.h" +#include "io.h" +#include "math.h" +#include "time.h" + +#define OK 1 +#define ERROR 0 +#define TRUE 1 +#define FALSE 0 +#define MAXSIZE 20 /* ´æ´¢¿Õ¼ä³õʼ·ÖÅäÁ¿ */ + +typedef int Status; +typedef int SElemType; /* SElemTypeÀàÐ͸ù¾Ýʵ¼ÊÇé¿ö¶ø¶¨£¬ÕâÀï¼ÙÉèΪint */ + + +/* Á´Õ»½á¹¹ */ +typedef struct StackNode +{ + SElemType data; + struct StackNode *next; +}StackNode,*LinkStackPtr; + + +typedef struct +{ + LinkStackPtr top; + int count; +}LinkStack; + +Status visit(SElemType c) +{ + printf("%d ",c); + return OK; +} + +/* ¹¹ÔìÒ»¸ö¿ÕÕ»S */ +Status InitStack(LinkStack *S) +{ + S->top = (LinkStackPtr)malloc(sizeof(StackNode)); + if(!S->top) + return ERROR; + S->top=NULL; + S->count=0; + return OK; +} + +/* °ÑSÖÃΪ¿ÕÕ» */ +Status ClearStack(LinkStack *S) +{ + LinkStackPtr p,q; + p=S->top; + while(p) + { + q=p; + p=p->next; + free(q); + } + S->count=0; + return OK; +} + +/* ÈôÕ»SΪ¿ÕÕ»£¬Ôò·µ»ØTRUE£¬·ñÔò·µ»ØFALSE */ +Status StackEmpty(LinkStack S) +{ + if (S.count==0) + return TRUE; + else + return FALSE; +} + +/* ·µ»ØSµÄÔªËØ¸öÊý£¬¼´Õ»µÄ³¤¶È */ +int StackLength(LinkStack S) +{ + return S.count; +} + +/* ÈôÕ»²»¿Õ£¬ÔòÓÃe·µ»ØSµÄÕ»¶¥ÔªËØ£¬²¢·µ»ØOK£»·ñÔò·µ»ØERROR */ +Status GetTop(LinkStack S,SElemType *e) +{ + if (S.top==NULL) + return ERROR; + else + *e=S.top->data; + return OK; +} + +/* ²åÈëÔªËØeΪеÄÕ»¶¥ÔªËØ */ +Status Push(LinkStack *S,SElemType e) +{ + LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode)); + s->data=e; + s->next=S->top; /* °Ñµ±Ç°µÄÕ»¶¥ÔªËظ³Öµ¸øÐ½áµãµÄÖ±½Óºó¼Ì£¬¼ûͼÖТ٠*/ + S->top=s; /* ½«ÐµĽáµãs¸³Öµ¸øÕ»¶¥Ö¸Õ룬¼ûͼÖÐ¢Ú */ + S->count++; + return OK; +} + +/* ÈôÕ»²»¿Õ£¬Ôòɾ³ýSµÄÕ»¶¥ÔªËØ£¬ÓÃe·µ»ØÆäÖµ£¬²¢·µ»ØOK£»·ñÔò·µ»ØERROR */ +Status Pop(LinkStack *S,SElemType *e) +{ + LinkStackPtr p; + if(StackEmpty(*S)) + return ERROR; + *e=S->top->data; + p=S->top; /* ½«Õ»¶¥½áµã¸³Öµ¸øp£¬¼ûͼÖÐ¢Û */ + S->top=S->top->next; /* ʹµÃÕ»¶¥Ö¸ÕëÏÂÒÆÒ»Î»£¬Ö¸ÏòºóÒ»½áµã£¬¼ûͼÖÐ¢Ü */ + free(p); /* ÊͷŽáµãp */ + S->count--; + return OK; +} + +Status StackTraverse(LinkStack S) +{ + LinkStackPtr p; + p=S.top; + while(p) + { + visit(p->data); + p=p->next; + } + printf("\n"); + return OK; +} + +int main() +{ + int j; + LinkStack s; + int e; + if(InitStack(&s)==OK) + for(j=1;j<=10;j++) + Push(&s,j); + printf("Õ»ÖÐÔªËØÒÀ´ÎΪ£º"); + StackTraverse(s); + Pop(&s,&e); + printf("µ¯³öµÄÕ»¶¥ÔªËØ e=%d\n",e); + printf("Õ»¿Õ·ñ£º%d(1:¿Õ 0:·ñ)\n",StackEmpty(s)); + GetTop(s,&e); + printf("Õ»¶¥ÔªËØ e=%d Õ»µÄ³¤¶ÈΪ%d\n",e,StackLength(s)); + ClearStack(&s); + printf("Çå¿ÕÕ»ºó£¬Õ»¿Õ·ñ£º%d(1:¿Õ 0:·ñ)\n",StackEmpty(s)); + return 0; +} \ No newline at end of file diff --git a/_02.栈与队列/_c.链栈.c b/_02.栈与队列/_c.链栈.c new file mode 100644 index 0000000..cd63dc7 --- /dev/null +++ b/_02.栈与队列/_c.链栈.c @@ -0,0 +1,48 @@ +/* + * @Author: Xu Bai + * @Date: 2019-07-01 21:32:41 + * @LastEditors: Xu Bai + * @LastEditTime: 2019-07-01 21:39:07 + */ +#include "stdio.h" +#include "stdlib.h" +#include "io.h" + +#define MAXSIZE 20 +#define TRUE 1 +#define FALSE 0 +#define OK 1 +#define ERROR 0 + +typedef int Status; +typedef int ElemType; + +typedef struct StackNode +{ + ElemType data; + struct StackNode *next; +} StackNode, *LinkStackPtr; + +typedef struct +{ + LinkStackPtr top; + int count; +} LinkStack; + +Status visit(ElemType e) +{ + printf("%d ", e); + 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; +}