#include <stdio.h> #include <stdlib.h> #include <string.h> //#define LEN sizeof(LinkedList); typedef struct Student{ int score; char name[10]; struct Student *next; }LinkedList; /** * Create a linked list, n is the number of nodes created **/ LinkedList * create(int n){ LinkedList *head,*node,*end; head = (LinkedList*)malloc(sizeof(LinkedList)); end = head; char name[10]; for(int i=0;i<n;i++){ node = (LinkedList*)malloc(sizeof(LinkedList)); printf("enter student%d's name:\n",i+1); scanf("%s",name); strcpy(node->name,name); printf("enter student%d's score:\n",i+1); scanf("%d",&node->score); end->next = node; end = node; } end->next=NULL; return head; } /** * Linked list data is inserted, index index for the first node, node for the node to be inserted, old pointer to point to the original list **/ void insert(LinkedList *old,LinkedList *node,int index){ LinkedList *temp=old; int n=0; while(n<index&&temp->next!=NULL){ temp = temp->next; n++; } if(temp != NULL){ node->next = temp->next; temp->next = node; } else puts("index outof range"); } /* * Append list elements */ void append(LinkedList *list,LinkedList *append){ LinkedList *p; p = list; while(p->next!=NULL){ p = p->next; } p->next = append; p = append; } /** * Display the list of print **/ void displaylist(LinkedList *link){ while(link->next!=NULL){ link = link->next; printf("name:%s\tscore:%d\n",link->name,link->score); } } /** * Remove the list **/ void dellist(LinkedList *link,int index){ LinkedList *t; int temp = 0; while(temp<index&&link->next!=NULL){ t = link; temp ++; link = link->next; } if(link != NULL){ t->next = link->next; free(link); }else{ puts("index outof range"); } } /** * List of changes **/ void updatelist(LinkedList *link,LinkedList *node,int index){ LinkedList *t=link,*t1; int temp = 0; while(temp<index&&t->next!=NULL){ t1 = t; temp ++; t = t->next; } if(t != NULL){ node->next=t->next; t1->next = node; free(t); }else{ puts("index outof range"); } } /** * Gets the specified node list * Head to point to the head of the linked list pointer * Index for the first few nodes to be acquired **/ LinkedList getnode(LinkedList *head,int index){ int i=0; LinkedList *p,node; p=head; while(i<index&&p!=NULL){ i++; p=p->next; } node = * p; return node; } /** * Print the list of data fields **/ void display(LinkedList node){ printf("LinkedList:{name:%s,score:%d}\n",node.name,node.score); } int main(void){ int n; puts("enter node number:"); scanf("%d",&n); LinkedList *list = create(n); displaylist(list); puts("after insert a node:"); LinkedList temp,*node; temp.score = 88; strcpy(temp.name,"gwb"); node = &temp; insert(list,node,1); displaylist(list); puts("after append:"); LinkedList *tp = (LinkedList*)malloc(sizeof(LinkedList)); tp->score=99; strcpy(tp->name,"小明"); append(list,tp); displaylist(list); puts("after change:"); LinkedList *tp1 = (LinkedList*)malloc(sizeof(LinkedList)); tp1->score=99; strcpy (tp1-> name, "Xiaofang"); updatelist(list,tp1,3); displaylist(list); puts("after delete:"); dellist(list,2); displaylist(list); LinkedList nodes = getnode(list,2); display(nodes); return 0; }