单链表
来源:互联网 发布:unity3d导入图片 编辑:程序博客网 时间:2024/06/04 01:27
头文件:
struct Node {ElemType data;struct Node *next;};typedef struct Node *LinkList;
1.c基本的操作
Status InitList (LinkList *list) {//返回一个空的线性表*list = (LinkList)malloc (sizeof(struct Node));if (!list) {exit(OVERFLOW);}(*list)->next = NULL;return OK;}Status DesroyList (LinkList *list) {//销毁线性表LinkList q;while (*list) {q = (*list)->next;free (*list);*list = q;}return OK;}Status ClearList (LinkList *list) {//将链表重置为空表LinkList p,q;p = (*list)->next;while (p) {q = p->next;free (p);q = p;}(*list)->next = NULL; return OK;}Status ListEmpty (LinkList *list) {//判断链表是否为空if ((*list)->next == NULL) {return TRUE;}else {return FALSE;}}int ListLength (LinkList *list) {//返回的是链表的长度int count = 0;LinkList q = (*list)->next;while (q) {count++;q = q->next;}return count;}Status GetElem (LinkList *list,int i,ElemType *e) {//得到i位置上的元素int j = 1;LinkList q = (*list)->next;while (q!=NULL&&j <= i) {j++;q = q->next;}if (j > i) {*e = q->data;return OK;//存在}return ERROR;//不存在}int locateElem (LinkList *list,ElemType e,Status (*compare)(ElemType,ElemType)) {//找出相应的位置LinkList q = (*list)->next;int count = 0;while (q) {if (compare (q->data,e) == 0) {count++;break;}q = q->next;}return count;}Status PriorElem (LinkList *list,ElemType cur_e,ElemType *pre_e) {//cur_e的前一个位置,LinkList p = (*list)->next;LinkList q;if (p!=NULL) {//如果p为空的情况while (p->next!=NULL) {q = p->next;if (q->data == cur_e) {*pre_e = p->data;return OK;}p = q;}}return ERROR;}Status NextElem (LinkList *list,ElemType cur_e,ElemType *pre_e) {//返回的是cur_e的后一个位置LinkList p = (*list)->next;LinkList q;if (p!=NULL) {while (p->next!=NULL) {q = p->next;if (p->data == cur_e) {*pre_e = q->data;return OK;}p = q;}}return ERROR;}Status ListInsert (LinkList *list,int i,ElemType e) {//插入的操作int j = 1;LinkList q,p;p = (*list);while (p!=NULL&&j < i) {p = p->next;j++;}if (j >= i) {q = (LinkList)malloc(sizeof (struct Node));if (q == NULL) {return ERROR;}else {q->data = e;q->next = p->next;p->next = q;}}return OK;}Status ListDelete (LinkList *list,int i,ElemType *e) {int j = 0;LinkList p = *list;while (p->next&&j < i - 1){p = p->next;j++;}if (!p->next || j > i - 1) {return ERROR;}else {LinkList q = p->next;p->next = q->next;*e = q->data;free (q);return OK;}}Status LinkTravrse (LinkList *list,void (*visit)(ElemType)) {LinkList p = (*list)->next;while (p!=NULL) {visit(p->data);p = p->next;}return OK;}
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- java hashCode的常规协定
- Parallel's foreach method
- JTree简单的应用addTreeWillExpandListener
- ZooKeeper权限控制
- java经典网址
- 单链表
- 数据结构学习笔记 --- 查找(哈希表)
- fork VS vfork
- iOS: NSUrlConnection & SSL, Http connection frameworks
- 添加路由协议出错问题
- ubuntu 10.10或以上安装vmtools出现的错误以及解决方法。
- 《Win32多线程程序设计》学习笔记——几种同步方式
- java编程思想4-读书笔记-第11章
- linux驱动程序开发环境配置