#include<stdio.h> #include<stdlib.h> //typedef 80 MAXSIZE; #define MAXSIZE 20 typedef struct Node{ int data; int cursor; }Node,StaticList[MAXSIZE]; void InitialSpace(StaticList Space){ int i; for(i = 0;i < MAXSIZE - 1; i++){ Space[i].cursor = i + 1; } Space[MAXSIZE - 1].cursor = 0; } int Malloc_StaticList(StaticList Space){ int index; index = Space[0].cursor; if(index){ Space[0].cursor = Space[index].cursor; return index; } else{ printf("Space Full, Failed!\n"); exit(1); } } void Free_StaticList(StaticList Space,int index){ Space[index].data = 0; Space[index].cursor = Space[0].cursor; Space[0].cursor = index; } int InitialStaticList(StaticList Space){ int i; i = Malloc_StaticList(Space); Space[i].cursor = 0; return i; } void ClearStaticList(StaticList Space,int n_List){ int temp_n_List = n_List; n_List = Space[n_List].cursor; int t_cursor; while(n_List != 0){ t_cursor = Space[n_List].cursor; Space[n_List].data = 0; Free_StaticList(Space,n_List); n_List = t_cursor; } Space[temp_n_List].cursor = 0; printf("Clear Static List Executed!\n"); } void StaticListEmpty(StaticList space,int n_List){ if(space[n_List].cursor) printf("No Empty\n"); else printf("Empty!\n"); } int StaticList_Length(StaticList Space,int n_List){ int count = 0; while(Space[n_List].cursor){ count++; n_List = Space[n_List].cursor; } return count; } void InsertStaticList(StaticList Space,int n_List,int position,int e){ /* * * * */ int length = StaticList_Length(Space,n_List); int copy_n_List = n_List; if(position < 1 || position > length + 1){ printf("Insert funtion ERROR: position\n"); exit(1); } int new_i = Malloc_StaticList(Space); if(new_i){ Space[new_i].data = e; int count = 0,i; for(i = 1; i < position; i++){ // n_List = Space[n_List].cursor; } Space[new_i].cursor = Space[n_List].cursor; Space[n_List].cursor = new_i; printf("INFORMATION: Insert %d to List%d with position=%d executed!\n",e,copy_n_List,position); } } void DeleteStaticList(StaticList space,int n_List,int position){ int length = StaticList_Length(space,n_List); int t_n_List = n_List; if(position < 1 || position > length){ printf("function DeleteSataicList Error:position!\n"); } else { int count = 0,result; while(count < position - 1){ n_List = space[n_List].cursor; count++; } result = space[space[n_List].cursor].data; printf("deleteSataisList executed: element %d in position %d of List%d was deleted\n",result,position,t_n_List); int temp = space[n_List].cursor; space[n_List].cursor = space[space[n_List].cursor].cursor; Free_StaticList(space,temp); } } int GetStaticListElement(StaticList space,int n_List,int position){ int count = 0; int temp_n_List = n_List; while(space[n_List].cursor && count < position){ n_List = space[n_List].cursor; count++; } if(space[n_List].cursor == 0){ printf("INFORMATION:get staticList element Error: position!\n"); } else{ int e; e = space[n_List].data; printf("GetStaticListElement with position=%d from List%d executed! the result is %d\n",position,temp_n_List,e); } } int LocateStaticList(StaticList space,int n_List,int e){ n_List = space[n_List].cursor; while(n_List){ if(space[n_List].data == e){ return n_List; } n_List = space[n_List].cursor; } return 0; } void NextElement_SL(StaticList space,int n_List,int currentElement){ if(LocateStaticList(space,n_List,currentElement) == 0) printf("function NextElement Error:currentElement%d dose not exist\n",currentElement); else if(space[LocateStaticList(space,n_List,currentElement)].cursor == 0) printf("function NextElement Error:the currentElement%d is last one of list%d\n",currentElement,n_List); else printf("the nextElement of %d is %d\n",currentElement,space[space[LocateStaticList(space,n_List,currentElement)].cursor].data); } void PriorElement_SL(StaticList space,int n_List,int currentElement){ if(!LocateStaticList(space,n_List,currentElement)) printf("function PriorElement Error:currentElement%d does not exist\n",currentElement); else if(space[n_List].cursor == LocateStaticList(space,n_List,currentElement)) printf("function PriorElement Error:the currentElement%d is the first of the List%d\n",currentElement,n_List); else{ n_List = space[n_List].cursor; int temp; while(space[n_List].data != currentElement){ temp = n_List; n_List = space[n_List].cursor; } printf("the PriorElement of %d is %d\n",currentElement,space[temp].data); } } void DisplaySpace(StaticList Space){ int i; for(i = 0;i < MAXSIZE; i++) printf("%4d",Space[i].cursor); printf("\n"); for(i = 0;i < MAXSIZE; i++) printf("%4d",Space[i].data); printf("\n"); for(i = 0;i < MAXSIZE; i++) printf("%4d",i); printf("\n"); } /*****************************************************/ void CreateStaticList(StaticList space,int n_List,int length){ if(length > FreeSpaceLength(space)){ printf("No remaining Space!\n"); } else { int i,new_index; printf("Create Static List %d:\n",n_List); for(i = 1;i <= length;i++){ printf("--------enter %d element: ",i); new_index = Malloc_StaticList(space); scanf("%d",&space[new_index].data); space[n_List].cursor = new_index; n_List = new_index; } space[new_index].cursor = 0; } } int FreeSpaceLength(StaticList space){ int length = 0; int index = space[0].cursor; while(index){ length++; index = space[index].cursor; } return length; } void setdatato0inordertodisplay(StaticList space){ int i; for(i = 0;i < MAXSIZE; i++) space[i].data = 0; } void main(){ StaticList space; setdatato0inordertodisplay(space); InitialSpace(space); int list1 = InitialStaticList(space); int list2 = InitialStaticList(space); int list3 = InitialStaticList(space); printf(" SHOW SPACE\n"); DisplaySpace(space); int length3 = StaticList_Length(space,list3); printf("\nthe length of list3 is %d\n",length3); CreateStaticList(space,list3,5); CreateStaticList(space,list2,25); DisplaySpace(space); length3 = StaticList_Length(space,list3); printf("the length of list3 is %d\n",length3); int length2 = StaticList_Length(space,list2); printf("the length of list2 is %d\n",length2); CreateStaticList(space,list2,3); DisplaySpace(space); length2 = StaticList_Length(space,list2); printf("the length of list2 is %d\n",length2); InsertStaticList(space,list3,4,666); DisplaySpace(space); printf("the length of list3 is %d\n",StaticList_Length(space,list3)); GetStaticListElement(space,list3,3); GetStaticListElement(space,list3,9); GetStaticListElement(space,list1,1); GetStaticListElement(space,list2,1); if(LocateStaticList(space,list3,4)){ printf("the position of element 4 in List3 is %d\n",LocateStaticList(space,list3,4)); }else printf("locateStaticlist in list3 with 4 is Failed!\n"); if(LocateStaticList(space,list3,2)){ printf("the position of element 2 in List3 is %d\n",LocateStaticList(space,list3,4)); }else printf("locateStaticlist in list3 with 2 is Failed!\n"); printf("\n\ntest NextElemet\n"); NextElement_SL(space,list3,9); NextElement_SL(space,list3,7); NextElement_SL(space,list3,3); printf("\n\ntest PriorElement\n"); PriorElement_SL(space,list3,3); PriorElement_SL(space,list3,8); PriorElement_SL(space,list3,1); printf("\n"); DeleteStaticList(space,list3,5); printf("\nthe length of list3 is %d\n",StaticList_Length(space,list3)); DeleteStaticList(space,list2,35); printf("\nthe length of list2 is %d\n",StaticList_Length(space,list2)); InsertStaticList(space,list3,2,888); DisplaySpace(space); ClearStaticList(space,list3); DisplaySpace(space); }