diff --git a/02线性表链式存储_LinkList.c b/02线性表链式存储_LinkList.c deleted file mode 100644 index dbd71fd..0000000 --- a/02线性表链式存储_LinkList.c +++ /dev/null @@ -1,291 +0,0 @@ -#include "stdio.h" -#include "string.h" -#include "ctype.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;/* StatusǺ,ֵǺ״̬룬OK */ -typedef int ElemType;/* ElemType͸ʵΪint */ - - -Status visit(ElemType c) -{ - printf("%d ",c); - return OK; -} - -typedef struct Node -{ - ElemType data; - struct Node *next; -}Node; -typedef struct Node *LinkList; /* LinkList */ - -/* ʼ˳Ա */ -Status InitList(LinkList *L) -{ - *L=(LinkList)malloc(sizeof(Node)); /* ͷ,ʹLָͷ */ - if(!(*L)) /* 洢ʧ */ - return ERROR; - (*L)->next=NULL; /* ָΪ */ - - return OK; -} - -/* ʼ˳ԱLѴڡLΪձ򷵻TRUE򷵻FALSE */ -Status ListEmpty(LinkList L) -{ - if(L->next) - return FALSE; - else - return TRUE; -} - -/* ʼ˳ԱLѴڡLΪձ */ -Status ClearList(LinkList *L) -{ - LinkList p,q; - p=(*L)->next; /* pָһ */ - while(p) /* ûβ */ - { - q=p->next; - free(p); - p=q; - } - (*L)->next=NULL; /* ͷָΪ */ - return OK; -} - -/* ʼ˳ԱLѴڡLԪظ */ -int ListLength(LinkList L) -{ - int i=0; - LinkList p=L->next; /* pָһ */ - while(p) - { - i++; - p=p->next; - } - return i; -} - -/* ʼ˳ԱLѴڣ1iListLength(L) */ -/* eLеiԪصֵ */ -Status GetElem(LinkList L,int i,ElemType *e) -{ - int j; - LinkList p; /* һp */ - p = L->next; /* pָLĵһ */ - j = 1; /* jΪ */ - while (p && jnext; /* pָһ */ - ++j; - } - if ( !p || j>i ) - return ERROR; /* iԪز */ - *e = p->data; /* ȡiԪص */ - return OK; -} - -/* ʼ˳ԱLѴ */ -/* Lе1eϵԪصλ */ -/* Ԫزڣ򷵻ֵΪ0 */ -int LocateElem(LinkList L,ElemType e) -{ - int i=0; - LinkList p=L->next; - while(p) - { - i++; - if(p->data==e) /* ҵԪ */ - return i; - p=p->next; - } - - return 0; -} - - -/* ʼ˳ԱLѴ,1iListLength(L) */ -/* Lеiλ֮ǰµԪeLijȼ1 */ -Status ListInsert(LinkList *L,int i,ElemType e) -{ - int j; - LinkList p,s; - p = *L; - j = 1; - while (p && j < i) /* Ѱҵi */ - { - p = p->next; - ++j; - } - if (!p || j > i) - return ERROR; /* iԪز */ - s = (LinkList)malloc(sizeof(Node)); /* ½(CԱ׼) */ - s->data = e; - s->next = p->next; /* pĺ̽㸳ֵsĺ */ - p->next = s; /* sֵpĺ */ - return OK; -} - -/* ʼ˳ԱLѴڣ1iListLength(L) */ -/* ɾLĵiԪأeֵLijȼ1 */ -Status ListDelete(LinkList *L,int i,ElemType *e) -{ - int j; - LinkList p,q; - p = *L; - j = 1; - while (p->next && j < i) /* ѰҵiԪ */ - { - p = p->next; - ++j; - } - if (!(p->next) || j > i) - return ERROR; /* iԪز */ - q = p->next; - p->next = q->next; /* qĺ̸ֵpĺ */ - *e = q->data; /* qеݸe */ - free(q); /* ϵͳմ˽㣬ͷڴ */ - return OK; -} - -/* ʼ˳ԱLѴ */ -/* ζLÿԪ */ -Status ListTraverse(LinkList L) -{ - LinkList p=L->next; - while(p) - { - visit(p->data); - p=p->next; - } - printf("\n"); - return OK; -} - -/* nԪصֵͷĵԱLͷ巨 */ -void CreateListHead(LinkList *L, int n) -{ - LinkList p; - int i; - srand(time(0)); /* ʼ */ - *L = (LinkList)malloc(sizeof(Node)); - (*L)->next = NULL; /* Ƚһͷĵ */ - for (i=0; idata = rand()%100+1; /* 100ڵ */ - p->next = (*L)->next; - (*L)->next = p; /* 뵽ͷ */ - } -} - -/* nԪصֵͷĵԱLβ巨 */ -void CreateListTail(LinkList *L, int n) -{ - LinkList p,r; - int i; - srand(time(0)); /* ʼ */ - *L = (LinkList)malloc(sizeof(Node)); /* LΪԱ */ - r=*L; /* rΪָβĽ */ - for (i=0; idata = rand()%100+1; /* 100ڵ */ - r->next=p; /* βն˽ָָ½ */ - r = p; /* ǰ½㶨Ϊβն˽ */ - } - r->next = NULL; /* ʾǰ */ -} - -int main() -{ - LinkList L; - ElemType e; - Status i; - int j,k; - i=InitList(&L); - printf("ʼLListLength(L)=%d\n",ListLength(L)); - for(j=1;j<=5;j++) - i=ListInsert(&L,1,j); - printf("Lıͷβ15L.data="); - ListTraverse(L); - - printf("ListLength(L)=%d \n",ListLength(L)); - i=ListEmpty(L); - printf("LǷգi=%d(1: 0:)\n",i); - - i=ClearList(&L); - printf("LListLength(L)=%d\n",ListLength(L)); - i=ListEmpty(L); - printf("LǷգi=%d(1: 0:)\n",i); - - for(j=1;j<=10;j++) - ListInsert(&L,j,j); - printf("Lıββ110L.data="); - ListTraverse(L); - - printf("ListLength(L)=%d \n",ListLength(L)); - - ListInsert(&L,1,0); - printf("Lıͷ0L.data="); - ListTraverse(L); - printf("ListLength(L)=%d \n",ListLength(L)); - - GetElem(L,5,&e); - printf("5ԪصֵΪ%d\n",e); - for(j=3;j<=4;j++) - { - k=LocateElem(L,j); - if(k) - printf("%dԪصֵΪ%d\n",k,j); - else - printf("ûֵΪ%dԪ\n",j); - } - - - k=ListLength(L); /* kΪ */ - for(j=k+1;j>=k;j--) - { - i=ListDelete(&L,j,&e); /* ɾj */ - if(i==ERROR) - printf("ɾ%dʧ\n",j); - else - printf("ɾ%dԪֵΪ%d\n",j,e); - } - printf("LԪأ"); - ListTraverse(L); - - j=5; - ListDelete(&L,j,&e); /* ɾ5 */ - printf("ɾ%dԪֵΪ%d\n",j,e); - - printf("LԪأ"); - ListTraverse(L); - - i=ClearList(&L); - printf("\nLListLength(L)=%d\n",ListLength(L)); - CreateListHead(&L,20); - printf("崴LԪ(ͷ巨)"); - ListTraverse(L); - - i=ClearList(&L); - printf("\nɾLListLength(L)=%d\n",ListLength(L)); - CreateListTail(&L,20); - printf("崴LԪ(β巨)"); - ListTraverse(L); - getchar(); - return 0; -} - diff --git a/_02.线性表链式存储.c b/_02.线性表链式存储.c index d549db6..6ea7011 100644 --- a/_02.线性表链式存储.c +++ b/_02.线性表链式存储.c @@ -2,13 +2,15 @@ * @Author: Xu Bai * @Date: 2019-06-26 22:48:42 * @LastEditors: Xu Bai - * @LastEditTime: 2019-06-27 22:23:47 + * @LastEditTime: 2019-06-28 21:13:10 */ #include "stdio.h" #include "string.h" #include "ctype.h" #include "stdlib.h" #include "io.h" +#include "math.h" +#include "time.h" #define OK 1 #define ERROR 0 @@ -32,11 +34,11 @@ typedef struct Node } Node; typedef struct Node *LinkList; -// 把 struct Node * 定义成了新类型 LinkList。这个类型是一个结构体的指针 +// struct Node * LinkListһṹָ Status InitList(LinkList *L) { - // 插入和删除用到的是实参,所以就需要用指向指针的指针。 + // ɾõʵΣԾҪָָָ롣 *L = (LinkList)malloc(sizeof(Node)); if (!(*L)) { @@ -87,7 +89,7 @@ Status GetElem(LinkList L, int i, ElemType *e) { LinkList p = L->next; LinkList q; - int k = 0; + int k = 1; while (p && k < i) { k++; @@ -126,11 +128,11 @@ int locateElem(LinkList L, ElemType e) Status ListInsert(LinkList *L, int i, ElemType e) { - // 在L中第i个位置之前插入新的数据元素e + // Lеiλ֮ǰµԪe LinkList p, q; int j = 1; p = *L; - // 寻找第i个结点 + // Ѱҵi while (p && j < i) { p = p->next; @@ -139,7 +141,7 @@ Status ListInsert(LinkList *L, int i, ElemType e) if (j > i || !p) { - // 如果遍历到结束也没找到i结点 + // Ҳûҵi return ERROR; } q = (LinkList)malloc(sizeof(Node)); @@ -149,30 +151,110 @@ Status ListInsert(LinkList *L, int i, ElemType e) return OK; } -Status ListTraverse(LinkList L){ +Status ListDelete(LinkList *L, int i, ElemType *e) +{ + LinkList p, q; + p = *L; + int j = 1; + while (p && j < i) + { + // Ѱҽ + p = p->next; + j++; + } + if (!(p->next) || j > i) + { + return ERROR; + } + q = p->next; + *e = q->data; + p->next = q->next; + free(q); + return OK; +} + +void CreateListHead(LinkList *L, int n) +{ + // ͷĵͷ巨 + LinkList p; + int i; + srand(time(0)); // ʼ + *L = (LinkList)malloc(sizeof(Node)); + (*L)->next = NULL; + for (i = 0; i < n; i++) + { + p = (LinkList)malloc(sizeof(Node)); + p->data = rand() % 100 + 1; //100ڵ + p->next = (*L)->next; + (*L)->next = p; + } +} + +void CreateListTail(LinkList *L, int n) +{ + // β巨 + LinkList p, r; + int i; + srand(time(0)); + *L = (LinkList)malloc(sizeof(Node)); + r = *L; //rָβ + for (i = 0; i < n; i++) + { + p = (Node *)malloc(sizeof(Node)); + p->data = rand() % 100 + 1; + // ½㲢뵽β + r->next = p; + r = p; + } + r->next = NULL; +} + +Status ListTraverse(LinkList L) +{ LinkList p = L->next; while (p) { visit(p->data); - p=p->next; + p = p->next; } printf("\n"); return OK; - } int main() { LinkList L; ElemType e; + int i, j, k; InitList(&L); - ListInsert(&L, 1, 3); - ListInsert(&L, 1, 2); - ListInsert(&L, 1, 1); + for (j = 1; j <= 5; j++) + i = ListInsert(&L, 1, j); + printf("Lıͷβ15L.data="); ListTraverse(L); - int i = locateElem(L, 3); - int j = GetElem(L,2,&e); - printf("i= %d , e= %d", i,e); + ListInsert(&L, 1, 0); + printf("Lıͷ0L.data="); + ListTraverse(L); + GetElem(L, 5, &e); + printf("5ԪصֵΪ%d\n", e); + k = ListLength(L); /* kΪ */ + for (j = k + 1; j >= k; j--) + { + i = ListDelete(&L, j, &e); /* ɾj */ + if (i == ERROR) + printf("ɾ%dʧ\n", j); + else + printf("ɾ%dԪֵΪ%d\n", j, e); + } + printf("LԪأ"); + ListTraverse(L); + ClearList(&L); + CreateListHead(&L, 20); + printf("崴LԪ(ͷ巨)"); + ListTraverse(L); + ClearList(&L); + CreateListTail(&L,20); + printf("崴LԪ(β巨)"); + ListTraverse(L); getchar(); return OK; } \ No newline at end of file diff --git a/a.out b/a.out index 7d7171e..47889f4 100644 Binary files a/a.out and b/a.out differ