创建结构体
typedef struct StaticLinkedNode {
char data;
int next;
} * NodePtr;
typedef struct StaticLinkedList {
NodePtr node;
int * used;
} * ListPtr;
初始化
ListPtr initLinkedList ( ) {
ListPtr tempPtr= ( ListPtr) malloc ( sizeof ( struct StaticLinkedList ) ) ;
tempPtr-> node= ( NodePtr) malloc ( sizeof ( struct StaticLinkedNode ) * D_SIZE) ;
tempPtr-> used= ( int * ) malloc ( sizeof ( int ) * D_SIZE) ;
tempPtr-> node[ 0 ] . data= '\0' ;
tempPtr-> node[ 0 ] . next= - 1 ;
tempPtr-> used[ 0 ] = 1 ;
int i;
for ( i= 1 ; i< D_SIZE; i++ ) {
tempPtr-> used[ i] = 0 ;
}
return tempPtr;
}
打印链表
```c
void printList ( ListPtr paraListPtr) {
int p= 0 ;
while ( p!= - 1 ) {
printf ( "%c" , paraListPtr-> node[ p] . data) ;
p= paraListPtr-> node[ p] . next;
}
printf ( "\r\n" ) ;
}
插入元素到指定位置
void insertElement ( ListPtr paraListPtr, char paraChar, int paraPosition) {
int p= 0 , q, i;
for ( i= 0 ; i< paraPosition; i++ ) {
p= paraListPtr-> node[ p] . next;
if ( p== - 1 ) {
printf ( "此位置不存在\r\n" ) ;
return ;
}
}
for ( i= 1 ; i< D_SIZE; i++ ) {
if ( paraListPtr-> used[ i] == 0 ) {
printf ( "Space at %d allocated.\r\n" , i) ;
paraListPtr-> used[ i] = 1 ;
q= i;
break ;
}
}
if ( i== D_SIZE) {
printf ( "No space\r\n" ) ;
return ;
}
paraListPtr-> node[ q] . data= paraChar;
printf ( "Linking\r\n" ) ;
paraListPtr-> node[ q] . next= paraListPtr-> node[ p] . next;
paraListPtr-> node[ p] . next= q;
}
删除元素
void deleteElement ( ListPtr paraListPtr, char paraChar) {
int p, q;
p= 0 ;
while ( ( paraListPtr-> node[ p] . next!= - 1 ) && ( paraListPtr-> node[ paraListPtr-> node[ p] . next] . data!= paraChar) ) {
p= paraListPtr-> node[ p] . next;
}
if ( paraListPtr-> node[ p] . next== - 1 ) {
printf ( "cannot delete %c\r\n" , paraChar) ;
return ;
}
q= paraListPtr-> node[ p] . next;
paraListPtr-> node[ p] . next= paraListPtr-> node[ paraListPtr-> node[ p] . next] . next;
paraListPtr-> used[ q] = 0 ;
}
完整代码
# include <stdio.h>
# include <malloc.h>
# define D_SIZE 5
typedef struct StaticLinkedNode {
char data;
int next;
} * NodePtr;
typedef struct StaticLinkedList {
NodePtr node;
int * used;
} * ListPtr;
ListPtr initLinkedList ( ) {
ListPtr tempPtr= ( ListPtr) malloc ( sizeof ( struct StaticLinkedList ) ) ;
tempPtr-> node= ( NodePtr) malloc ( sizeof ( struct StaticLinkedNode ) * D_SIZE) ;
tempPtr-> used= ( int * ) malloc ( sizeof ( int ) * D_SIZE) ;
tempPtr-> node[ 0 ] . data= '\0' ;
tempPtr-> node[ 0 ] . next= - 1 ;
tempPtr-> used[ 0 ] = 1 ;
int i;
for ( i= 1 ; i< D_SIZE; i++ ) {
tempPtr-> used[ i] = 0 ;
}
return tempPtr;
}
void printList ( ListPtr paraListPtr) {
int p= 0 ;
while ( p!= - 1 ) {
printf ( "%c" , paraListPtr-> node[ p] . data) ;
p= paraListPtr-> node[ p] . next;
}
printf ( "\r\n" ) ;
}
void insertElement ( ListPtr paraListPtr, char paraChar, int paraPosition) {
int p= 0 , q, i;
for ( i= 0 ; i< paraPosition; i++ ) {
p= paraListPtr-> node[ p] . next;
if ( p== - 1 ) {
printf ( "此位置不存在\r\n" ) ;
return ;
}
}
for ( i= 1 ; i< D_SIZE; i++ ) {
if ( paraListPtr-> used[ i] == 0 ) {
printf ( "Space at %d allocated.\r\n" , i) ;
paraListPtr-> used[ i] = 1 ;
q= i;
break ;
}
}
if ( i== D_SIZE) {
printf ( "No space\r\n" ) ;
return ;
}
paraListPtr-> node[ q] . data= paraChar;
printf ( "Linking\r\n" ) ;
paraListPtr-> node[ q] . next= paraListPtr-> node[ p] . next;
paraListPtr-> node[ p] . next= q;
}
void deleteElement ( ListPtr paraListPtr, char paraChar) {
int p, q;
p= 0 ;
while ( ( paraListPtr-> node[ p] . next!= - 1 ) && ( paraListPtr-> node[ paraListPtr-> node[ p] . next] . data!= paraChar) ) {
p= paraListPtr-> node[ p] . next;
}
if ( paraListPtr-> node[ p] . next== - 1 ) {
printf ( "cannot delete %c\r\n" , paraChar) ;
return ;
}
q= paraListPtr-> node[ p] . next;
paraListPtr-> node[ p] . next= paraListPtr-> node[ paraListPtr-> node[ p] . next] . next;
paraListPtr-> used[ q] = 0 ;
}
void test ( ) {
ListPtr tempList = initLinkedList ( ) ;
printList ( tempList) ;
insertElement ( tempList, 'H' , 0 ) ;
insertElement ( tempList, 'e' , 1 ) ;
insertElement ( tempList, 'l' , 2 ) ;
insertElement ( tempList, 'l' , 3 ) ;
insertElement ( tempList, 'o' , 4 ) ;
printList ( tempList) ;
printf ( "Deleting 'e'.\r\n" ) ;
deleteElement ( tempList, 'e' ) ;
printf ( "Deleting 'a'.\r\n" ) ;
deleteElement ( tempList, 'a' ) ;
printf ( "Deleting 'o'.\r\n" ) ;
deleteElement ( tempList, 'o' ) ;
printList ( tempList) ;
insertElement ( tempList, 'x' , 1 ) ;
printList ( tempList) ;
}
void main ( ) {
test ( ) ;
}
运行结果
Space at 1 allocated.
Linking
Space at 2 allocated.
Linking
Space at 3 allocated.
Linking
Space at 4 allocated.
Linking
No space
Hell
Deleting 'e' .
Deleting 'a' .
cannot delete a
Deleting 'o' .
cannot delete o
Hll
Space at 2 allocated.
Linking
Hxll