diff --git a/_01.线性表/03静态链表_StaticLinkList.c b/_01.线性表/03静态链表_StaticLinkList.c deleted file mode 100644 index d775f1d..0000000 --- a/_01.线性表/03静态链表_StaticLinkList.c +++ /dev/null @@ -1,158 +0,0 @@ -#include "string.h" -#include "ctype.h" - -#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 1000 /* 洢ռʼ */ - -typedef int Status; /* StatusǺ,ֵǺ״̬룬OK */ -typedef char ElemType; /* ElemType͸ʵΪchar */ - - -Status visit(ElemType c) -{ - printf("%c ",c); - return OK; -} - -/* Աľ̬洢ṹ */ -typedef struct -{ - ElemType data; - int cur; /* α(Cursor) Ϊ0ʱʾָ */ -} Component,StaticLinkList[MAXSIZE]; - - -/* һάspaceиһspace[0].curΪͷָ룬"0"ʾָ */ -Status InitList(StaticLinkList space) -{ - int i; - for (i=0; i ListLength(L) + 1) - return ERROR; - j = Malloc_SSL(L); /* ÿз± */ - if (j) - { - L[j].data = e; /* ݸֵ˷data */ - for(l = 1; l <= i - 1; l++) /* ҵiԪ֮ǰλ */ - k = L[k].cur; - L[j].cur = L[k].cur; /* ѵiԪ֮ǰcurֵԪصcur */ - L[k].cur = j; /* Ԫص±긳ֵiԪ֮ǰԪصur */ - return OK; - } - return ERROR; -} - -/* ɾLеiԪ */ -Status ListDelete(StaticLinkList L, int i) -{ - int j, k; - if (i < 1 || i > ListLength(L)) - return ERROR; - k = MAXSIZE - 1; - for (j = 1; j <= i - 1; j++) - k = L[k].cur; - j = L[k].cur; - L[k].cur = L[j].cur; - Free_SSL(L, j); - return OK; -} - -Status ListTraverse(StaticLinkList L) -{ - int j=0; - int i=L[MAXSIZE-1].cur; - while(i) - { - visit(L[i].data); - i=L[i].cur; - j++; - } - return j; - printf("\n"); - return OK; -} - - -int main() -{ - StaticLinkList L; - Status i; - i=InitList(L); - printf("ʼLL.length=%d\n",ListLength(L)); - - i=ListInsert(L,1,'F'); - i=ListInsert(L,1,'E'); - i=ListInsert(L,1,'D'); - i=ListInsert(L,1,'B'); - i=ListInsert(L,1,'A'); - - printf("\nLıͷβFEDBA\nL.data="); - ListTraverse(L); - - i=ListInsert(L,3,'C'); - printf("\nLġB롰D֮롰C\nL.data="); - ListTraverse(L); - - i=ListDelete(L,1); - printf("\nLɾA\nL.data="); - ListTraverse(L); - - printf("\n"); - - return 0; -} - diff --git a/_01.线性表/_c.静态链表.c b/_01.线性表/_c.静态链表.c index 7e80b4f..bd919a5 100644 --- a/_01.线性表/_c.静态链表.c +++ b/_01.线性表/_c.静态链表.c @@ -14,23 +14,145 @@ typedef int Status; typedef char ElemType; -Status visit(ElemType c){ - printf("%c ",c); +Status visit(ElemType c) +{ + printf("%c ", c); return OK; } -typedef struct +typedef struct { ElemType data; - int cur;// α꣬Ϊ0ʱָ -}Component,staticLinkList[MAXSIZE]; + int cur; // α꣬Ϊ0ʱָ +} Component, StaticLinkList[MAXSIZE]; +Status InitList(StaticLinkList space) +{ + // һάspaceиһ + // space[0].curΪͷָ룬ָ־λ0 + int i; + for (i = 0; i < MAXSIZE - 1; i++) + { + space[i].cur = i + 1; + } + space[MAXSIZE - 1].cur = 0; + // ̬β0 + return OK; +} +int Malloc_SSL(StaticLinkList space) +{ + // ǿգ򷵻طĽ±꣬򷵻0 + // + int i = space[0].cur; + // ǰһԪصcurֵ + // һÿе± + if (space[0].cur) + { + // Ҫóһʹˣǰ + // һ + space[0].cur = space[i].cur; + } + return i; +} +void Free_SSL(StaticLinkList space, int k) +{ // ±ΪkĿյ + // ѵһԪصcurֵҪɾķcur + space[k].cur = space[0].cur; + // Ҫɾĺ̽ڵϢ + // Ҫɾķ±긳ֵһԪصcur + space[0].cur = k; +} + +int ListLength(StaticLinkList L) +{ + int i, j; + j = 0; + i = L[MAXSIZE - 1].cur; + while (i) + { + i = L[i].cur; + j++; + } + return j; +} + +Status ListInsert(StaticLinkList L, int i, ElemType e) +{ + if (i < 1 || i > ListLength(L) + 1) + { + return ERROR; + } + int j = Malloc_SSL(L); + // ÿз± + int k = MAXSIZE - 1; + int l; + if (j) + { + L[j].data = e; + for (l = 1; l <= i - 1; l++) + { + // ҵiԪ֮ǰλøֵk + k = L[k].cur; + } + L[j].cur = L[k].cur; + //iԪ֮ǰcurֵԪصcur + L[k].cur = j; + // j + return OK; + } + return ERROR; +} + +Status ListDelete(StaticLinkList L, int i) +{ + if (i < 1 || i > ListLength(L)) + { + return ERROR; + } + int k = MAXSIZE - 1; + int j; + for (j = 0; j < i - 1; j++) + { + k = L[k].cur; + } + j = L[k].cur; + L[k].cur = L[j].cur; + Free_SSL(L, j); + return OK; +} + +Status ListTraverse(StaticLinkList L) +{ + int i, j; + i = L[MAXSIZE - 1].cur; + //j = 0; + while (i) + { + visit(L[i].data); + i = L[i].cur; + //j++; + } + printf("\n"); + return OK; +} int main() { + StaticLinkList L; + InitList(L); + printf("ʼL.length=%d \n", ListLength(L)); + ListInsert(L, 1, 'u'); + ListInsert(L, 1, 'X'); + ListInsert(L, 1, ' '); + ListInsert(L, 1, 'i'); + ListInsert(L, 1, 'a'); + ListInsert(L, 1, 'B'); + ListTraverse(L); + ListDelete(L, 4); + ListTraverse(L); getchar(); return 0; } \ No newline at end of file diff --git a/a.out b/a.out index 2c2d07e..fa9bd0b 100644 Binary files a/a.out and b/a.out differ