1 #include "stdio.h" 2 struct node{ 3 int data; 4 int next;//下一个的指针 5 }list[100],space[100]; 6 int Listlen = 0; 7 void init() 8 { 9 for(int i = 0;i < 99;i++) 10 space[i].next = i + 1;//space[0].next代表下一个空闲空间 11 space[99].next = 0;//目前静态链表为空 12 } 13 int Free(int p) 14 { 15 space[p].next = space[0].next;//把空余空间也连起来 16 space[0].next = p;//p这个节点的空间空出来了 17 } 18 int Malloc() 19 { 20 int i = space[0].next;//把当前空闲空间给i 21 if(space[0].next)//防止空间被排满后还继续使用 22 space[0].next = space[i].next;//往下找一个空闲空间 23 return i; 24 } 25 void add(int p,int val) 26 { 27 if(p < 1 || p > Listlen + 1){ 28 printf("Add fail!\n"); 29 return ;//插入失败 30 } 31 int s = Malloc();//申请空间 s : space 32 if(s){ 33 Listlen++; 34 int move = 99;//最后一个指针 35 printf("%d\n",s); 36 list[s].data = val;//放入数据 val : value 37 for(int i = 1;i <= p;i++)//移动指针,找到插入数据前一个位置 38 move = list[move].next; 39 list[s].next = list[move].next;//进行位置链接,也就是指针的衔接 40 list[move].next = s;//同上 41 } 42 printf("Add successful!\n");//插入成功 43 } 44 void del(int p)//p : position 45 { 46 if(p < 1 || p > Listlen + 1){ 47 printf("Del fail!\n"); 48 return;//删除失败 49 } 50 int move = 99; 51 Listlen--; 52 for(int i = 1;i <= p;i++) 53 move = list[move].next; 54 int t;//temp 55 t = list[move].next;//这个是要删除的那个节点的位置,这两句特别容易错,请仔细分析 56 list[move].next = list[t].next;//把前一个节点接到要删除节点的后一个节点 57 Free(t); 58 printf("Del successful!\n"); 59 } 60 int main() 61 { 62 init(); 63 add(1,3); 64 add(2,7); 65 add(3,6); 66 del(1); 67 int mv = 0; 68 mv = list[mv].next; 69 while(mv != 0){ 70 if(list[mv].next != 0) 71 printf("%d-->",list[mv].data); 72 else 73 printf("%d\n",list[mv].data); 74 mv = list[mv].next; 75 } 76 return 0; 77 }
总结:调了我一个小时,眼睛都不行了,下班下班~~~~~~