线性表的基本操作实现(基于链表)
2015-12-09 22:01
337 查看
用C++链表方式实现了线性表的一些基本操作,包括插入元素,删除元素,反转线性表等.
#include <stdio.h> #include <stdlib.h> #define ERROR NULL typedef int ElementType; typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List; Position Find(List L, ElementType X);//返回线性表中首次出现X的位置。若找不到则返回ERROR; Position FindPrevious(List L, Position P);//给定位置P,返回指向位置P的前一位置.如果找不到,则返回ERROR List Insert(List L, ElementType X, Position P); //将X插入在位置P指向的结点之前,返回链表的表头。如果参数P指向非法位置,返回ERROR; List Delete(List L, Position P); //将位置P的元素删除并返回链表的表头。若参数P指向非法位置,并返回ERROR。 List Reverse(List L);//反转线性表 void Print(List L);//打印线性表的内容 void Destory(List L);//销毁线性表 Position Find(List L, ElementType X) { Position find=L; while (1) { if (find) { if (find->Data == X) { break; } else { find = find->Next; } } else {break;} } if (find) { return find; } else { return ERROR; } } Position FindPrevious(List L, Position P) { Position findprev = L; while (1) { if (findprev) { if (findprev->Next != P) { findprev = findprev->Next; } else { break; } } else { break; } } if (findprev) { return findprev; } else { return ERROR; } } List Insert(List L, ElementType X, Position P) { if (L == P) { Position Temp = (Position)malloc(sizeof(struct LNode)); Temp->Data = X; Temp->Next = L; return Temp; } else { Position findprev = FindPrevious(L, P); if (findprev) { Position Temp = (Position)malloc(sizeof(struct LNode)); Temp->Data = X; Temp->Next = P; findprev->Next = Temp; return L; } else { return ERROR; } } } List Delete(List L, Position P) { if (L == P) { L = L->Next; free(P); return L; } else { Position findprev = FindPrevious(L, P); if (findprev) { findprev->Next = P->Next; free(P); return L; } else { return ERROR; } } } List Reverse(List L) { if (L->Next) { List front = L; List middle = L->Next; front->Next = NULL; if (middle->Next) { List end; end = middle->Next; while (end) { middle->Next = front; front = middle; middle = end; end = end->Next; } } middle->Next = front; return middle; } else { return L; } } void Print(List L) { Position p; for (p = L; p; p = p->Next) { printf("&d ", p->Data); } } void Destory(List L) { Position p; for (p = L; L->Next; p = L) { L = L->Next; free(p); } free(L); }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例