静态链表实现

 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 }

总结:调了我一个小时,眼睛都不行了,下班下班~~~~~~

上一篇:tomcat中reloadable作用


下一篇:JVM 简析