93
									
								
								2.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								2.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct Student student;
 | 
				
			||||||
 | 
					struct Student {
 | 
				
			||||||
 | 
					  int sid;
 | 
				
			||||||
 | 
					  struct Student *next;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void insert(student **head, int idx, uint sid) {
 | 
				
			||||||
 | 
					  student *new = malloc(sizeof(student));
 | 
				
			||||||
 | 
					  new->sid = sid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int i = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  student *prev = NULL, *cur = *head;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (int i = 0;; i++) {
 | 
				
			||||||
 | 
					    if (i == idx) {
 | 
				
			||||||
 | 
					      if (prev != NULL)
 | 
				
			||||||
 | 
					        prev->next = new;
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        *head = new;
 | 
				
			||||||
 | 
					      new->next = cur;
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (cur == NULL)
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    prev = cur;
 | 
				
			||||||
 | 
					    cur = cur->next;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  printf("Index %d does not exist\n", idx);
 | 
				
			||||||
 | 
					  return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void delete (student **head, int idx) {
 | 
				
			||||||
 | 
					  student *prev = NULL, *cur = *head;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (int i = 0; cur != NULL; i++) {
 | 
				
			||||||
 | 
					    if (i == idx) {
 | 
				
			||||||
 | 
					      if (prev != NULL)
 | 
				
			||||||
 | 
					        prev->next = cur->next;
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        *head = cur->next;
 | 
				
			||||||
 | 
					      free(cur);
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    prev = cur;
 | 
				
			||||||
 | 
					    cur = cur->next;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  printf("Index %d does not exist\n", idx);
 | 
				
			||||||
 | 
					  return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void reverse(student **head) {
 | 
				
			||||||
 | 
					  student *prev = NULL, *cur = *head;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while (cur->next != NULL) {
 | 
				
			||||||
 | 
					    student *next = cur->next;
 | 
				
			||||||
 | 
					    cur->next = prev;
 | 
				
			||||||
 | 
					    prev = cur;
 | 
				
			||||||
 | 
					    cur = next;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cur->next = prev;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  *head = cur;
 | 
				
			||||||
 | 
					  return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
					  student *head = NULL;
 | 
				
			||||||
 | 
					  insert(&head, 0, 1);
 | 
				
			||||||
 | 
					  insert(&head, 1, 2002);
 | 
				
			||||||
 | 
					  insert(&head, 2, -9);
 | 
				
			||||||
 | 
					  insert(&head, 3, 52);
 | 
				
			||||||
 | 
					  insert(&head, 1, 4);
 | 
				
			||||||
 | 
					  delete (&head, 2);
 | 
				
			||||||
 | 
					  reverse(&head);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while (head != NULL) {
 | 
				
			||||||
 | 
					    printf("%d ", head->sid);
 | 
				
			||||||
 | 
					    head = head->next;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // free
 | 
				
			||||||
 | 
					  while (head != NULL)
 | 
				
			||||||
 | 
					    delete(&head, 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										70
									
								
								4.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								4.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct Node node;
 | 
				
			||||||
 | 
					struct Node {
 | 
				
			||||||
 | 
					  int collegeid;
 | 
				
			||||||
 | 
					  struct Node *next;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void insert(node **last, int collegeid) {
 | 
				
			||||||
 | 
					  node *dst = malloc(sizeof(node));
 | 
				
			||||||
 | 
					  dst->collegeid = collegeid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (*last == NULL)
 | 
				
			||||||
 | 
					    *last = dst;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ((*last)->next == NULL)
 | 
				
			||||||
 | 
					    (*last)->next = dst, dst->next = *last;
 | 
				
			||||||
 | 
					  else {
 | 
				
			||||||
 | 
					    dst->next = (*last)->next;
 | 
				
			||||||
 | 
					    (*last)->next = dst;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void delete (node **last) {
 | 
				
			||||||
 | 
					  node *prev = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ((*last)->next == NULL)
 | 
				
			||||||
 | 
					    goto cleanup;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  prev = *last;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while (prev->next != *last)
 | 
				
			||||||
 | 
					    prev = prev->next;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (prev->next->next == prev)
 | 
				
			||||||
 | 
					    prev->next = NULL;
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    prev->next = (*last)->next;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cleanup:
 | 
				
			||||||
 | 
					  free(*last);
 | 
				
			||||||
 | 
					  *last = prev;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void display(node *last) {
 | 
				
			||||||
 | 
					  node *cur = last;
 | 
				
			||||||
 | 
					  while (cur->next != last) {
 | 
				
			||||||
 | 
					    printf("%d ", cur->next->collegeid);
 | 
				
			||||||
 | 
					    cur = cur->next;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  printf("%d\n", last->collegeid);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
					  node *last = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  insert(&last, 1);
 | 
				
			||||||
 | 
					  insert(&last, 4);
 | 
				
			||||||
 | 
					  insert(&last, 99);
 | 
				
			||||||
 | 
					  insert(&last, 1223);
 | 
				
			||||||
 | 
					  display(last);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  delete (&last);
 | 
				
			||||||
 | 
					  display(last);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // free
 | 
				
			||||||
 | 
					  while (last != NULL)
 | 
				
			||||||
 | 
					    delete (&last);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user