diff --git a/02线性表链式存储_LinkList.c b/02线性表链式存储_LinkList.c new file mode 100644 index 0000000..8d8ad96 --- /dev/null +++ b/02线性表链式存储_LinkList.c @@ -0,0 +1,292 @@ +#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); + + + return 0; +} + diff --git a/_02.线性表链式存储.c b/_02.线性表链式存储.c new file mode 100644 index 0000000..29af9e2 --- /dev/null +++ b/_02.线性表链式存储.c @@ -0,0 +1,35 @@ +/* + * @Author: Xu Bai + * @Date: 2019-06-26 22:48:42 + * @LastEditors: Xu Bai + * @LastEditTime: 2019-06-26 22:55:57 + */ +#include "stdio.h" +#include "string.h" +#include "ctype.h" +#include "stdlib.h" +#include "io.h" + +#define OK 1 +#define ERROR 0 +#define TRUE 1 +#define FALSE 0 +#define MAXSIZE 20 + +typedef int Status; +typedef int ElemType; + +Status visit(ElemType c) +{ + printf("%d ",c); + return OK; +} + +typedef struct Node +{ + ElemType data; + struct Node *next; +}Node; + +typedef struct Node *LinkList; +