静态链表常用操作代码(学习)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 1000
#define OK 1
#define ERROR -1
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType data;
int cur;
} Component, StaticLinkList[ MAXSIZE] ;
void Display_List ( StaticLinkList L) ;
Status InitList ( StaticLinkList space) ;
int Malloc_SLL ( StaticLinkList space) ;
Status ListInsert ( StaticLinkList L, int i, ElemType e) ;
void Free_SL ( StaticLinkList L, int k) ;
bool StaticLinkListDelete ( StaticLinkList L, int i, int * key) ;
int StaticLinkListLength ( StaticLinkList L) ;
int main ( )
{
int n, e;
StaticLinkList L;
InitList ( L) ;
printf ( "请输入数据个数:\n" ) ;
scanf ( "%d" , & n) ;
printf ( "请输入数据:\n" ) ;
for ( int j= 0 ; j< n; j++ )
{
scanf ( "%d" , & e) ;
ListInsert ( L, j+ 1 , e) ;
}
Display_List ( L) ;
printf ( "\n" ) ;
printf ( "请输入删除的位置:\n" ) ;
scanf ( "%d" , & n) ;
StaticLinkListDelete ( L, n, & e) ;
printf ( "删除的元素是:\n" ) ;
printf ( "%d\n" , e) ;
printf ( "现在的链表是:\n" ) ;
Display_List ( L) ;
}
}
void Display_List ( StaticLinkList L)
{
int i = L[ MAXSIZE - 1 ] . cur;
while ( i != 0 )
{
printf ( "%d " , L[ i] . data) ;
i = L[ i] . cur;
}
}
Status InitList ( StaticLinkList space)
{
int i;
for ( i = 0 ; i < MAXSIZE - 1 ; i++ )
{
space[ i] . cur = i + 1 ;
}
space[ MAXSIZE - 1 ] . cur = 0 ;
return OK;
}
int Malloc_SLL ( StaticLinkList space)
{
int i = space[ 0 ] . cur;
if ( space[ 0 ] . cur)
space[ 0 ] . cur = space[ i] . cur;
return i;
}
Status ListInsert ( StaticLinkList L, int i, ElemType e)
{
int j, k, l;
k = MAXSIZE - 1 ;
if ( i < 1 || i > StaticLinkListLength ( L) + 1 )
{
return ERROR;
}
j = Malloc_SLL ( L) ;
if ( j != 0 )
{
L[ j] . data = e;
for ( l = 1 ; l <= i - 1 ; l++ )
{
k = L[ k] . cur;
}
L[ j] . cur = L[ k] . cur;
L[ k] . cur = j;
return OK;
}
return ERROR;
}
void Free_SL ( StaticLinkList L, int k)
{
L[ k] . cur = L[ 0 ] . cur;
L[ 0 ] . cur = k;
}
bool StaticLinkListDelete ( StaticLinkList L, int i, int * key)
{
if ( i < 1 || i >= StaticLinkListLength ( L) )
{
return false;
}
int k = MAXSIZE - 1 ;
for ( int l = 1 ; l <= i - 1 ; l++ )
{
k = L[ k] . cur;
}
int j = L[ k] . cur;
* key = L[ j] . data;
L[ k] . cur = L[ j] . cur;
Free_SL ( L, j) ;
return true;
}
int StaticLinkListLength ( StaticLinkList L)
{
int i = L[ MAXSIZE - 1 ] . cur;
int j = 0 ;
while ( i)
{
j++ ;
i = L[ i] . cur;
}
return j;
}