数据结构与算法(二)线性表链式存储
- 接口
#ifndef __LINEAR_LIST_H__ #define __LINEAR_LIST_H__ #include <stdlib.h> #include <stdio.h> #include<stdbool.h> typedef int ElementType; typedef struct LNode { ElementType Data; struct LNode* Next; }LNode; typedef LNode* List;/* */ int Length(List L);// List FindKth(int K, List PtrL);// List Find(ElementType X, List PtrL); List Insert(ElementType X, int i, List PtrL);// List Delete(int i, List PtrL);// void Display(List PtrL); #endif
- 函数实现
#include "LinearList.h" int Length(List L) { int length = 0; while (L){ L = L->Next; length++; } return length; } List FindKth(int K, List PtrL) { List p = PtrL; int i = 1; while (p != NULL && i < K) {// p = p->Next; i++; } if (i == K) { return p; } else { return NULL; } } List Find(ElementType X, List PtrL) { List p = PtrL; while(p!=NULL && p->Data!=X){ p = p->Next; } return p; } List Insert(ElementType X, int i, List PtrL) { List p, s; if (i == 1) { // s = (List)malloc(sizeof(struct LNode)); s->Data = X; s->Next = PtrL; return s; } p = FindKth(i - 1,PtrL);// if (p == NULL) { printf("insert position error."); return NULL; } else { s = (List)malloc(sizeof(struct LNode)); s->Data = X; s->Next = p->Next; p->Next = s; return PtrL; } } List Delete(int i, List PtrL) { List p, s; if (i == 1) {// s = PtrL; if (PtrL != NULL) { PtrL = PtrL->Next; } else { return NULL; } free(s); return PtrL; } p = FindKth(i - 1, PtrL);// if (p == NULL) { printf("delete pre position is error.\n"); return NULL; } else if (p->Next == NULL) {// printf("delete position is error.\n"); return NULL; } else {//i s = p->Next; p->Next = s->Next; free(s); return PtrL; } } void Display(List PtrL) { List p = PtrL; while (p!=NULL)// { printf("%d ", p->Data); p = p->Next; } printf("\n"); }
- 测试函数
int main(int argc, char**argv) { List MyList = NULL; for (int i = 0; i < 10; i++) { MyList = Insert(i, i+1, MyList); } Display(MyList); printf("length is %d\n", Length(MyList)); Delete(7, MyList); Display(MyList); printf("length is %d\n", Length(MyList)); return 0; }
- 测试结果
- GitHub地址:
https://github.com/baiyu2017/baiyu2021.git