1 #include<stdio.h> 2 #include<stdlib.h> 3 4 //typedef 80 MAXSIZE; 5 #define MAXSIZE 20 6 7 typedef struct Node{ 8 int data; 9 int cursor; 10 }Node,StaticList[MAXSIZE]; 11 12 void InitialSpace(StaticList Space){ 13 int i; 14 for(i = 0;i < MAXSIZE - 1; i++){ 15 Space[i].cursor = i + 1; 16 } 17 Space[MAXSIZE - 1].cursor = 0; 18 } 19 int Malloc_StaticList(StaticList Space){ 20 int index; 21 index = Space[0].cursor; 22 if(index){ 23 Space[0].cursor = Space[index].cursor; 24 return index; 25 } 26 else{ 27 printf("Space Full, Failed!\n"); 28 exit(1); 29 } 30 } 31 void Free_StaticList(StaticList Space,int index){ 32 Space[index].data = 0; 33 Space[index].cursor = Space[0].cursor; 34 Space[0].cursor = index; 35 } 36 int InitialStaticList(StaticList Space){ 37 int i; 38 i = Malloc_StaticList(Space); 39 Space[i].cursor = 0; 40 return i; 41 } 42 void ClearStaticList(StaticList Space,int n_List){ 43 int temp_n_List = n_List; 44 n_List = Space[n_List].cursor; 45 int t_cursor; 46 while(n_List != 0){ 47 t_cursor = Space[n_List].cursor; 48 Space[n_List].data = 0; 49 Free_StaticList(Space,n_List); 50 n_List = t_cursor; 51 } 52 Space[temp_n_List].cursor = 0; 53 printf("Clear Static List Executed!\n"); 54 } 55 void StaticListEmpty(StaticList space,int n_List){ 56 if(space[n_List].cursor) 57 printf("No Empty\n"); 58 else 59 printf("Empty!\n"); 60 } 61 int StaticList_Length(StaticList Space,int n_List){ 62 int count = 0; 63 while(Space[n_List].cursor){ 64 count++; 65 n_List = Space[n_List].cursor; 66 } 67 return count; 68 } 69 void InsertStaticList(StaticList Space,int n_List,int position,int e){ 70 /* 71 * 72 * 73 * */ 74 int length = StaticList_Length(Space,n_List); 75 int copy_n_List = n_List; 76 if(position < 1 || position > length + 1){ 77 printf("Insert funtion ERROR: position\n"); 78 exit(1); 79 } 80 int new_i = Malloc_StaticList(Space); 81 if(new_i){ 82 Space[new_i].data = e; 83 int count = 0,i; 84 for(i = 1; i < position; i++){ // 85 n_List = Space[n_List].cursor; 86 } 87 Space[new_i].cursor = Space[n_List].cursor; 88 Space[n_List].cursor = new_i; 89 printf("INFORMATION: Insert %d to List%d with position=%d executed!\n",e,copy_n_List,position); 90 } 91 } 92 void DeleteStaticList(StaticList space,int n_List,int position){ 93 int length = StaticList_Length(space,n_List); 94 int t_n_List = n_List; 95 if(position < 1 || position > length){ 96 printf("function DeleteSataicList Error:position!\n"); 97 } 98 else 99 { 100 int count = 0,result; 101 while(count < position - 1){ 102 n_List = space[n_List].cursor; 103 count++; 104 } 105 result = space[space[n_List].cursor].data; 106 printf("deleteSataisList executed: element %d in position %d of List%d was deleted\n",result,position,t_n_List); 107 int temp = space[n_List].cursor; 108 space[n_List].cursor = space[space[n_List].cursor].cursor; 109 Free_StaticList(space,temp); 110 } 111 } 112 int GetStaticListElement(StaticList space,int n_List,int position){ 113 int count = 0; 114 int temp_n_List = n_List; 115 while(space[n_List].cursor && count < position){ 116 n_List = space[n_List].cursor; 117 count++; 118 } 119 if(space[n_List].cursor == 0){ 120 printf("INFORMATION:get staticList element Error: position!\n"); 121 } 122 else{ 123 int e; 124 e = space[n_List].data; 125 printf("GetStaticListElement with position=%d from List%d executed! the result is %d\n",position,temp_n_List,e); 126 } 127 } 128 int LocateStaticList(StaticList space,int n_List,int e){ 129 n_List = space[n_List].cursor; 130 while(n_List){ 131 if(space[n_List].data == e){ 132 return n_List; 133 } 134 n_List = space[n_List].cursor; 135 } 136 return 0; 137 } 138 void NextElement_SL(StaticList space,int n_List,int currentElement){ 139 if(LocateStaticList(space,n_List,currentElement) == 0) 140 printf("function NextElement Error:currentElement%d dose not exist\n",currentElement); 141 else if(space[LocateStaticList(space,n_List,currentElement)].cursor == 0) 142 printf("function NextElement Error:the currentElement%d is last one of list%d\n",currentElement,n_List); 143 else 144 printf("the nextElement of %d is %d\n",currentElement,space[space[LocateStaticList(space,n_List,currentElement)].cursor].data); 145 } 146 void PriorElement_SL(StaticList space,int n_List,int currentElement){ 147 if(!LocateStaticList(space,n_List,currentElement)) 148 printf("function PriorElement Error:currentElement%d does not exist\n",currentElement); 149 else if(space[n_List].cursor == LocateStaticList(space,n_List,currentElement)) 150 printf("function PriorElement Error:the currentElement%d is the first of the List%d\n",currentElement,n_List); 151 else{ 152 n_List = space[n_List].cursor; 153 int temp; 154 while(space[n_List].data != currentElement){ 155 temp = n_List; 156 n_List = space[n_List].cursor; 157 } 158 printf("the PriorElement of %d is %d\n",currentElement,space[temp].data); 159 } 160 } 161 void DisplaySpace(StaticList Space){ 162 int i; 163 for(i = 0;i < MAXSIZE; i++) 164 printf("%4d",Space[i].cursor); 165 printf("\n"); 166 for(i = 0;i < MAXSIZE; i++) 167 printf("%4d",Space[i].data); 168 printf("\n"); 169 for(i = 0;i < MAXSIZE; i++) 170 printf("%4d",i); 171 printf("\n"); 172 } 173 /*****************************************************/ 174 void CreateStaticList(StaticList space,int n_List,int length){ 175 if(length > FreeSpaceLength(space)){ 176 printf("No remaining Space!\n"); 177 } 178 else 179 { 180 int i,new_index; 181 printf("Create Static List %d:\n",n_List); 182 for(i = 1;i <= length;i++){ 183 printf("--------enter %d element: ",i); 184 new_index = Malloc_StaticList(space); 185 scanf("%d",&space[new_index].data); 186 space[n_List].cursor = new_index; 187 n_List = new_index; 188 } 189 space[new_index].cursor = 0; 190 } 191 } 192 int FreeSpaceLength(StaticList space){ 193 int length = 0; 194 int index = space[0].cursor; 195 while(index){ 196 length++; 197 index = space[index].cursor; 198 } 199 return length; 200 } 201 void setdatato0inordertodisplay(StaticList space){ 202 int i; 203 for(i = 0;i < MAXSIZE; i++) 204 space[i].data = 0; 205 } 206 void main(){ 207 StaticList space; 208 setdatato0inordertodisplay(space); 209 InitialSpace(space); 210 211 int list1 = InitialStaticList(space); 212 int list2 = InitialStaticList(space); 213 int list3 = InitialStaticList(space); 214 215 printf(" SHOW SPACE\n"); 216 DisplaySpace(space); 217 218 int length3 = StaticList_Length(space,list3); 219 printf("\nthe length of list3 is %d\n",length3); 220 CreateStaticList(space,list3,5); 221 CreateStaticList(space,list2,25); 222 DisplaySpace(space); 223 224 length3 = StaticList_Length(space,list3); 225 printf("the length of list3 is %d\n",length3); 226 int length2 = StaticList_Length(space,list2); 227 printf("the length of list2 is %d\n",length2); 228 229 CreateStaticList(space,list2,3); 230 DisplaySpace(space); 231 length2 = StaticList_Length(space,list2); 232 printf("the length of list2 is %d\n",length2); 233 InsertStaticList(space,list3,4,666); 234 235 DisplaySpace(space); 236 printf("the length of list3 is %d\n",StaticList_Length(space,list3)); 237 238 GetStaticListElement(space,list3,3); 239 GetStaticListElement(space,list3,9); 240 GetStaticListElement(space,list1,1); 241 GetStaticListElement(space,list2,1); 242 243 if(LocateStaticList(space,list3,4)){ 244 printf("the position of element 4 in List3 is %d\n",LocateStaticList(space,list3,4)); 245 }else 246 printf("locateStaticlist in list3 with 4 is Failed!\n"); 247 248 if(LocateStaticList(space,list3,2)){ 249 printf("the position of element 2 in List3 is %d\n",LocateStaticList(space,list3,4)); 250 }else 251 printf("locateStaticlist in list3 with 2 is Failed!\n"); 252 253 printf("\n\ntest NextElemet\n"); 254 NextElement_SL(space,list3,9); 255 NextElement_SL(space,list3,7); 256 NextElement_SL(space,list3,3); 257 258 printf("\n\ntest PriorElement\n"); 259 PriorElement_SL(space,list3,3); 260 PriorElement_SL(space,list3,8); 261 PriorElement_SL(space,list3,1); 262 263 printf("\n"); 264 DeleteStaticList(space,list3,5); 265 printf("\nthe length of list3 is %d\n",StaticList_Length(space,list3)); 266 DeleteStaticList(space,list2,35); 267 printf("\nthe length of list2 is %d\n",StaticList_Length(space,list2)); 268 269 InsertStaticList(space,list3,2,888); 270 DisplaySpace(space); 271 272 ClearStaticList(space,list3); 273 DisplaySpace(space); 274 }
时间: 2024-10-05 23:54:55