数据结构笔记---单链表
来源:互联网 发布:在线ftp源码 编辑:程序博客网 时间:2024/04/28 04:23
继续。。。
因为几个while里忘记更新指针。调试了好久!!!!
烦死了
需要注意的地方。。。
InitList_L函数的参数必须是LinkList* L
即LNode**。
因为InitList_L函数不仅要改变L指向的内容,还要改变L的指向,
若不用LinkList* L 。则无法改变L的指向!
#ifndef __LINKLIST__H__#define __LINKLIST__H__#include <stdio.h>#include <malloc.h>#define ElemType inttypedef enum { OK, NO, OVERFLOW}Status;typedef struct LNode { ElemType data; struct LNode *next;}LNode, *LinkList;Status InitList_L(LinkList *L) { if( !(*L = (LinkList)malloc(sizeof(LNode))) ) { return OVERFLOW; } (*L)->next = NULL; return OK;}void DestroyList_L(LinkList L) { LNode *pL = L; while (pL->next) { LNode *temp = pL->next; free(pL); pL = temp; } free(pL);}void ClearList_L(LinkList L) { LNode *pL = L; while (pL->next) { LNode *temp = pL->next; free(pL); pL = temp; }}Status ListEmpty_L(LinkList L) { if (NULL == L->next) { return OK; } return NO;}int ListLength_L(LinkList L) { int count = 0; LNode *pL = L; while (NULL != pL->next) { ++count; pL = pL->next; } return count;}Status ListInsert_L(LinkList L, int i, ElemType e) { int length = ListLength_L(L); if (i < 1 || i > length + 1) { return OVERFLOW; } //pL points to the element which we will insert the e after it LNode *pL = L; while (--i) { pL = pL->next; } LNode *temp = (LNode *)malloc(sizeof(LNode)); if (!temp) { return OVERFLOW; } temp->data = e; temp->next = pL->next; pL->next = temp; return OK;}Status ListDelete_L(LinkList L, int i, ElemType *e) { int length = ListLength_L(L); if (i < 1 || i > length) { return OVERFLOW; } LNode *pL = L; while (--i) { pL = pL->next; } *e = pL->next->data; pL->next = pL->next->next; return OK;}Status GetElem_L(LinkList L, int i, ElemType *e) { int length = ListLength_L(L); if (i < 1 || i > length) { return OVERFLOW; } LNode *pL = L; while (--i) { pL = pL->next; } *e = pL->next->data; return OK;}int LocateElem_L(LinkList L, ElemType e) { int count = 1; LNode *pL = L->next; while (pL) { if (e == pL->data) { return count; } ++count; pL = pL->next; } return 0;}Status PriorElem_L(LinkList L, ElemType cur_e, ElemType *pre_e) { int loc = LocateElem_L(L, cur_e); if (0 == loc || 1 == loc) { return OVERFLOW; } GetElem_L(L, loc - 1, pre_e); return OK;}Status NextElem_L(LinkList L, ElemType cur_e, ElemType *next_e) { int loc = LocateElem_L(L, cur_e); if (0 == loc ||ListLength_L(L) == loc) { return OVERFLOW; } GetElem_L(L, loc + 1, next_e); return OK;}void ListTraverse_L(LinkList L, void (*visit)(ElemType)) { LNode *pL = L->next; while (pL) { visit(pL->data); pL = pL->next; }}#endif
- 数据结构笔记---单链表
- 【数据结构】单链表学习笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构 笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- 数据结构笔记
- Source Insight将gcc的输出结果链接到文件+行
- Android UI学习 - FrameLayou和布局优化
- JAVA 中进行网络通信时 两端 序列化对象的类所处的包名必须一致
- Android UI学习 - TableLayout
- Hanoi学习笔记
- 数据结构笔记---单链表
- Android UI学习 - Tab的学习和使用
- Android UI学习 - GridView和ImageView的使用
- GDTR和LDTR如何把虚拟地址转换成线性地址
- 用c++和python写GUI程序(python嵌入方式)
- Activity生命周期的学习以及Logcat的使用
- Activity的跳转与传值
- 单链表的反转
- Perl:关于标准输出STDOUT和标准错误STDERR z