http://blog.csdn.net/ayymbirst/article/details/4430416
#include <stdio.h>
#include <stdlib.h>
typedef struct Elem{
int data;
int next;/*指定下一个元素位序*/
}Elem_p;
typedef struct node{
Elem_p *Elem;
int length;
int size;
}NODE;
/*创建静态链表*/
int createList(NODE *L, int size){
L->Elem = (Elem_p *)malloc(sizeof(Elem_p)*(size + 1));
if(L->Elem == NULL)
return 0;
L->Elem[0].next = -1;
L->length = 0;
L->size = size;
return 1;
}
/*插入元素*/
int addData(NODE *L, int data){
int k = 0;
if(L->size <= L->length)
return 0;
/*升序插入元素*/
while(L->Elem[L->Elem[k].next].data != -1 && L->Elem[L->Elem[k].next].data < data){
k = L->Elem[k].next;
}
L->Elem[L->length+1].data = data;
L->Elem[L->length+1].next = L->Elem[k].next;
L->Elem[k].next = L->length+1;
(L->length)++;
}
void print(int d){
printf("/n %d", d);
}
/*遍历链表*/
void foreach(NODE L, void(*t)(int)){
int k;
k = L.Elem[0].next;
while(k!=-1){
(*t)(L.Elem[k].data);
k = L.Elem[k].next;
}
}
/*返回指定位序索引*/
int getElemAt(int index, NODE L, int *pre){
int p,k = 0;
if(index < 0 || index > L.length)
return -4;
p = 0;
while(p != -1 && k < index){
*pre = p;
p = L.Elem[p].next;
k++;
}
if(p == -1 || k > index)
return -4;
return p;
}
/*指定位序插入元素*/
int insertElemAt(NODE *L, int index, int data){
int p, pre;
if(L->length >= L->size)
return 0;
if(index < 1 || index > L->length+1)
return 0;
p = getElemAt(index-1, *L, &pre);
if(p == -4) return 0;
/*在 位序 L->Elem[p] 和 L->Elem[L->Elem[p].next] 间插入元素*/
L->Elem[L->length + 1].data = data;
L->Elem[L->length + 1].next = L->Elem[p].next;
L->Elem[p].next = L->length + 1;
L->length++;
return 1;
}
/*删除指定位序元素*/
int deleteElemAt(NODE *L, int index){
int pre, p;
p = getElemAt(index, *L, &pre);
if(p == -4||p==0)return 0;
L->Elem[pre].next = L->Elem[p].next;
L->length--;
return 1;
}
void main()
{
NODE L;
int k, p;
//clrscr();
createList(&L, 7);
addData(&L, 1);
addData(&L, 2);
addData(&L, 3);
addData(&L, 4);
addData(&L, 5);
addData(&L, 10);
insertElemAt(&L, 3, 1);
foreach(L, print);
//free(&L);
}
原文有一些错误,转贴备用