数据结构与算法学习笔记——链表部分实现(数组形式)
2013-10-15 23:20
1176 查看
/******************************************************************************************************* Copyright(C);* Filename :* Author :* Version :* Date :* Description :******************************************************************************************************/#include <stdio.h>/****************************************************************/#define ElementType unsigned int#define MAX_ELEMENT 10#define NIL -1int _L, _F;ElementType _key[ MAX_ELEMENT+1 ];ElementType _next[ MAX_ELEMENT+1 ];ElementType _prev[ MAX_ELEMENT+1 ];/****************************************************************/int AllocateObject (void);void CreateList (void);int Delete (int pos);int Find (ElementType e );void FreeObject (int pos);int GetLength (void);int Insert (ElementType e, int pos);int IsEmpty (void);int IsFull (void);int IsLast (int pos);void ListIndex (void);void PrintList (void);/****************************************************************/int main(void){int i;CreateList();for ( i=0; i<MAX_ELEMENT; i++ ){Insert(i,i);}printf("length:%d\n",GetLength());Delete(Find(9));printf("length after delete: %d\n",GetLength());Insert(0,-1);PrintList();printf("length:%d\n",GetLength());PrintList();Delete(Find(1));Delete(Find(3));Delete(Find(5));ListIndex();return 0;}int IsEmpty(void ){return _next[_L] == NIL;}int IsFull(void){return _F == NIL;}int IsLast(int pos){return _next[pos] == NIL;}int AllocateObject(void){int address = NIL;if (!IsFull() ){address = _F;_F = _next[ _F ];_prev[ _F ] = NIL;}return address;}void CreateList(void){int i;_L = 0;_next[ _L ] =NIL;_F = 1;for ( i=_F; i<MAX_ELEMENT; i++ ){_next[ i ] = i+1;_prev[ i ] = i-1;}_prev[ _F ] = NIL;_next[ i ] = NIL;}int GetLength(void){int len = 0;int node = _next[_L];while( node != NIL ){len++;node = _next[node];}return len;}int Insert(ElementType e, int pos){int i = 0;int address_cur;int address_pre;int address_new;if ( -1 == pos ){pos = GetLength();}if ( pos > GetLength() || pos < 0 || IsFull() ){return -1;}address_cur = _next[_L];address_pre = _L;while ( i<pos && address_cur!=NIL ){i++;address_cur = _next[ address_cur ];address_pre = _next[ address_pre ];}address_new = AllocateObject();_key[ address_new ] = e;_next[ address_new ] = address_cur;_prev[ address_new ] = address_pre;_next[ address_pre ] = address_new;if ( address_cur != NIL ){_prev[ address_cur ] = address_new;}return 0;}int Find(ElementType e){int i = 0;int node = _next[ _L ];if ( IsEmpty() ){return -1;}while ( node!=NIL && _key[node]!=e ){node = _next[ node ];i++;}if ( node!=NIL ){return i;}else{return -1;}}void FreeObject(int pos){if ( IsEmpty() ){return;}_next[ pos ] = _F;_prev[ _F ] = pos;_prev[ pos ] = NIL;_F = pos;}int Delete(int pos){int a = _next[ _L ];int i = 0;int len = GetLength();if ( pos<0 || pos>=len ){return -1;}while( i<pos ){a = _next[ a ];i++;}_next[ _prev[a] ] = _next[ a ];if ( _next[ a ] != NIL ){_prev[ _next[a] ] = _prev[ a ];}FreeObject(a);return 0;}void PrintList(void){int i = _next[ _L ];while( i != NIL ){printf("%d,",_key[i]);i = _next[ i ];}printf("\n");}void ListIndex(void){int i;printf("L = %d\n", _L);printf("F = %d\n", _F);printf(" ");for ( i=0; i<=MAX_ELEMENT; i++ ){printf("%5d", i);}printf("\n");printf("_next: ");for (i=0; i<=MAX_ELEMENT; i++){printf("%3d, ",_next[i]);}printf("\n");printf("_key: ");for (i=0; i<=MAX_ELEMENT; i++){printf("%3d, ",_key[i]);}printf("\n");printf("_prev: ");for (i=0; i<=MAX_ELEMENT; i++){printf("%3d, ",_prev[i]);}printf("\n");}[/code]
相关文章推荐
- 【数据结构与算法学习笔记】PART3 线性结构(除向量外,数组、栈、队列、链表)
- #数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA)
- 数据结构 学习笔记之:静态链表--史上最简单的C语言实现——只为掌握概念——不清楚静态链表的鸟鸟们有福了!
- 数据结构与算法学习笔记之 从0编号的数组
- 数据结构与算法学习笔记之写链表代码的正确姿势(下)
- 数据结构再学习--数组实现链表
- 【数据结构与算法学习笔记】PART2 向量(接口与实现,可扩充向量,无序向量,有序向量)
- 【学习笔记】数据结构与算法基础学习:链表
- 数据结构与算法学习笔记——动态规划的入门与编程实现
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 数据结构与算法学习笔记之写链表代码的正确姿势(下)
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 韩顺平_PHP程序员玩转算法公开课(第一季)07_使用数组实现堆栈_学习笔记_源代码图解_PPT文档整理
- 算法学习笔记之四:巧妙运用指针解决链表、字符串、数组等问题(同向双指针VS对向双指针)
- [数据结构与算法] : 栈的数组实现
- 【算法学习笔记】12.数据结构基础 图的初步1
- 大数据学习笔记之四十九 推荐算法的主要算法第二部分
- 数据结构与算法学习笔记02_2(线性表)
- 算法学习之数据结构之双向链表
- 数据结构与实现——数组、矩阵、链表、队列、栈、对象、二叉树和红黑树