Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************
- Online C Compiler.
- Code, Compile, Run and Debug C program online.
- Write your code in this editor and press "Run" button to compile and execute it.
- *******************************************************************************/
- #include <stdio.h>
- struct Node
- {
- void* key;
- struct Node* next;
- struct Node* pre;
- };
- struct List
- {
- struct Node* end;
- struct Node* current;
- struct Node* start;
- int start_index;
- int end_index;
- int current_index;
- };
- struct Node arr2[100];
- struct List arr1[5];
- int head_free_index=0;
- int node_free_index=0;;
- struct List* ListCreate()
- {
- struct List* ret;
- if(head_free_index+1>=5 || node_free_index+1>=100)
- return NULL;
- arr2[node_free_index].next=NULL;
- arr2[node_free_index].pre=NULL;
- arr2[node_free_index].key=NULL;
- arr1[head_free_index].start=&arr2[node_free_index];
- arr1[head_free_index].end=&arr2[node_free_index];
- arr1[head_free_index].current=&arr2[node_free_index];
- arr1[head_free_index].start_index=head_free_index;
- arr1[head_free_index].end_index=head_free_index;
- arr1[head_free_index].current_index=head_free_index;
- ret=&arr1[head_free_index];
- head_free_index++;
- node_free_index++;
- return ret;
- }
- int ListCount(struct List A)
- {
- struct Node* temp=A.start;
- int count=1;
- while(temp->next!=NULL)
- {
- count++;
- temp=temp->next;
- }
- return count;
- }
- void* ListFirst(struct List A)
- {
- A.current=A.start;
- return A.start;
- }
- void* ListLast(struct List A)
- {
- A.current=A.end;
- return A.end;
- }
- void* ListNext(struct List A)
- {
- if(A.current->next==NULL)
- return NULL;
- A.current=A.current->next;
- return A.current;
- }
- void* ListPrev(struct List A)
- {
- if(A.current->pre==NULL)
- return NULL;
- A.current=A.current->pre;
- return A.current;
- }
- void* ListCurr(struct List A)
- {
- return A.current;
- }
- int ListAdd(struct List A, void* item )
- {
- struct Node newNode;
- newNode.key=item;
- if(node_free_index>=100)
- return -1;
- if(A.current==NULL && A.current->next!=NULL)
- {
- newNode.next=A.start;
- A.start->pre=&newNode;
- newNode.pre=NULL;
- A.start=&newNode;
- A.current=&newNode;
- }
- if(A.current==NULL && A.current->pre!=NULL)
- {
- newNode.pre=A.end;
- A.end->next=&newNode;
- newNode.next=NULL;
- A.end=&newNode;
- A.current=&newNode;
- }
- else
- {
- newNode.next=A.current->next;
- A.current->next=&newNode;
- newNode.pre=A.current;
- newNode.next->pre=&newNode;
- }
- for(int i=node_free_index;i>A.current_index;i--)
- {
- arr2[i].key=arr2[i-1].key;
- arr2[i].next=arr2[i-1].next;
- arr2[i].pre=arr2[i-1].pre;
- }
- for(int i=0;i<head_free_index;i++)
- {
- if(i!=0)
- arr1[i].start=arr1[i].start->next;
- arr1[i].end=arr1[i].end->next;
- arr1[i].current=arr1[i].current->next;
- }
- }
- int main()
- {
- arr1[0]=*ListCreate();
- struct List C;
- C.start=arr1[0].start;
- C.end=arr1[0].end;
- C.current=arr1[0].current;
- int a = ListCount(C);
- printf("%d", a);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement