基于结构体数组的链表实现
2011-04-11 22:29
387 查看
/*基于结构体数组的链表实现*/
/* made by winlin 2011.4.11
*initialize( )初始化存储池
*insertNode( )插入一个节点
*deleteNode( )删除一个节点
*display_member( )显示存储池里面的数据
*display_info( )显示存储池当前的信息
*isempty( )存储池是否已满
*/
#include <iostream>
#include <cstdlib>
typedef int elementType;
const int NULL_VALUE=-1; //不存在的位置
//节点声明
typedef struct node
{
elementType data; //存放节点的数据
int next; //存放下一个节点在存储池数组中的序号
}Node;
//存储池
const int NUMNODES=2048;
Node nodeList[NUMNODES];
int freelist; //其值为空闲节点链的在存储池中的起始位置
int first; //其值为第一个节点在存储池中的位置
int emptyNodes;
void initialize( )
{
int i;
for( i=0;i<NUMNODES;++i )
{
nodeList[ i ].next=i+1;
}
nodeList[ NUMNODES-1 ].next=NULL_VALUE;
freelist=0;
first=NULL_VALUE;
emptyNodes=NUMNODES;
}
bool isempty( )
{
if( emptyNodes==NUMNODES )
return 1;
return 0;
}
int insertNode(const elementType& nodedata)
{
int temp;
if( emptyNodes<=0 )
{
std::cout<<"the NodeList has full/n";
exit( -1 );
}
temp=freelist;
freelist=nodeList[ freelist ].next; //从空闲链表中剔除开始的那个节点
if( first==NULL_VALUE )
{
first=temp;
nodeList[ temp].data=nodedata;
nodeList[ temp].next=NULL_VALUE;
}
else
{
nodeList[ temp ].data=nodedata;
nodeList[ temp ].next=first;
first=temp;
}
--emptyNodes;
return temp;
}
void deleteNode(const elementType& nodedata )
{
if( first==NULL_VALUE )
{
std::cout<<"the NodeList is empty/n";
exit( -1 );
}
int temp_cur=first;
int temp_pre=first;
while( temp_cur !=NULL_VALUE)
{
if( nodeList[ first ].data==nodedata ) //第一个就是要删除的节点
{
int i=first;
first=nodeList[ i ].next; //处理已使用链
//处理未使用链
nodeList[i].next=freelist;
freelist=i;
}
else if( nodeList[ temp_cur].data==nodedata )
{
nodeList[temp_pre].next=nodeList[ temp_cur ].next; //处理已使用的链表
//处理未使用的链表
nodeList[ temp_cur ].next=freelist;
freelist=temp_cur;
}
temp_pre=temp_cur;
temp_cur=nodeList[ temp_cur].next;
}
++emptyNodes;
}
void display_member( )
{
if( emptyNodes==NUMNODES )
{
std::cout<<"the NodeList is empty/n";
exit( -1 );
}
int temp=first;
while(temp!=NULL_VALUE)
{
std::cout<<nodeList[ temp ].data<<" ";
temp=nodeList[ temp ].next;
}
std::cout<<"/n";
}
void display_info( )
{
std::cout<<"NodeList的总容量为:"<<NUMNODES<<"/nNodeList已经使用:"
<<NUMNODES-emptyNodes<<"/n剩余可用量为:"<<emptyNodes<<"/n";
}
int main( )
{
initialize( );
insertNode( 12 );
insertNode( 13 );
insertNode( 14 );
insertNode( 15 );
insertNode( 16 );
display_member( );
display_info( );
deleteNode(16);
deleteNode( 12 );
deleteNode( 13 );
display_member( );
display_info( );
return 0;
}
相关文章推荐
- 基于结构体数组的链表实现
- 基于数组和基于链表线性表C++实现
- "《算法导论》之‘线性表’":基于数组实现的单链表
- 结构体实现可变数组 链表
- 队列基于链表和数组的实现方法(java)
- 基于结构体数组实现静态内存池管理
- 基于数组和链表两种方式实现栈
- 基于数组或链表的堆栈实现
- HDU 1520 Anniversary party(树形DP 数组和结构体链表两种实现方式)
- 基于数组或链表的堆栈实现
- Python 使用由单链表构建的数组实现有边际优先队列 (基于class, 包含迭代器)
- 基于数组和链表的栈实现
- 基于链表、数组实现队列、循环队列
- 栈基于数组和链表的实现方式(java)
- 基于数组和链表的队列实现
- java数组、链表实现栈
- 基于数组实现顺序存储的线性表
- 基于链表节点实现二叉树节点
- C++实现队列--数组实现和链表实现
- 数据结构之——基于数组实现的循环队列