新手学习数据结构与算法---单链表的基本操作
2011-10-16 12:06
357 查看
单链表操作。。。
大家指点一下。
大家指点一下。
//单链表及其基本操作 //这里的链表都是带头结点的------------- #include <stdio.h> #include <malloc.h> //用来进行动态内存分配 #include <stdlib.h> typedef struct Node { char data; //数据域 struct Node * next; //指针域 }LinkList; //不要忘记这个; LinkList * SetNull(LinkList * L) //置空表操作 { L->next = NULL; //只要将第一个节点的指针域设置为NULL即可 return L; } int Length(LinkList * L) //求表长操作(带头结点),求的时候头结点不算 { LinkList * p; int n = 0; p = L->next; //从头结点后面的首元素节点开始计数 while(p != NULL) //循环计数 { p = p->next; n++; } return n; } LinkList * NumberGet(LinkList * L, int i) //从带头结点的链表中找到第i个结点(头结点不算) { int j = 1; LinkList * p; p = L->next; while(p != NULL && (j < i)) //用j主要是防止i可能有:i<=0,i>n { p = p->next; j++; } if(i == j) return p; else return NULL; //若未找到则返回NULL } LinkList * ValueGet(LinkList * L, char c) //按值查找某个结点 { LinkList * p; p = L->next; while(p != NULL) { if(c == p->data) //把c写在前面是防止写成=,方便报错 break; //若找到则直接跳出 else p = p->next; } return p; } void Insert(LinkList * L, int i, char c) //链表的插入操作,在第i个位置插入值c(头结点不算) { int j = 1; LinkList * p, * S; p = L; //为什么这个不是p = L->next??? ,后面说明 while(p != NULL && (j < i)) //在j为i这个位置插入 { p = p->next; j++; } if(p == NULL) //检测一下p是否为NULL printf("序号超过范围\n"); else { S = (LinkList *)malloc(sizeof(LinkList)); S->data = c; S->next = p->next; //就是这个原因,这时p正好是i前面的那个结点 } p->next = S; } void Delete(LinkList * L, int i) { int j = 1; LinkList * p, *T; p = L; //不用p = L->next 原因同上 while(p != NULL && (j < i)) { p = p->next; j++; } if(p != NULL && (p->next != NULL)) //确定第i个跟第i-1个都不是NULL { T = p->next; p->next = T->next; free(T); //释放这个结点 } } LinkList * CreatList() //建立单链表 { char c; LinkList * head, * L, * S; L = (LinkList *)malloc(sizeof(LinkList)); head = L; L->next = NULL; //先建一个空链表 while(c != '#') { S = (LinkList *)malloc(sizeof(LinkList)); S->data = c; S->next = L->next; //让S->next变为NULL L->next = S; c = getchar(); } return head; } void PrintList(LinkList * p) { p = p->next; //头结点不打印 while(p != NULL) { printf("%4c", p->data); p = p->next; } } int main() { //自己定义测试 }
相关文章推荐
- 数据结构入门学习系列-5(链表的基本操作算法)
- 新手学习数据结构与算法---链表多项式
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- 数据结构学习笔记(二) 链表之单链表的基本操作
- 算法与数据结构学习 10 链表操作
- 数据结构学习笔记(二) 链表之链栈基本操作
- 新手学习数据结构与算法---链表归并
- 数据结构学习之单向链表的基本操作(非递归实现)
- 数据结构高分笔记 算法2-8~2-11:链表的基本操作
- 数据结构学习笔记(二) 链表之链队列基本操作
- 数据结构学习笔记(二) 链表之带表头结点的单循环链表基本操作
- 算法与数据结构之十----内核中的链表操作学习
- 算法与数据结构-单向链表的基本操作C语言实现
- 数据结构-链表的基本操作
- 什么是算法-数据结构学习笔记1.2(基本概念)
- R语言学习笔记——数据结构 & 数据框基本操作
- 数据结构学习——链表的基本概念和分类
- JAVA中关于链表的操作和基本算法
- 数据结构基本算法:图的存储(以邻接链表为例)