# 13077 - Ranking System
>author: Utin
###### tags: `dynamic memory`
---
## Brief
See the code below
## Solution 0
```c=
#ifndef __FUNCTION_H__
#define __FUNCTION_H__
#include <string.h>
#include <stdlib.h>
typedef struct{
int score;
char* name;
} Node;
void Insert(Node** Table, int N, int score, char* name);
void Delete(Node** Table, int N, char* name);
int* Top(Node** Table, int N, int x);
int cmp(Node* A, Node* B) {
if (A->score != B->score) return B->score - A->score;
return strcmp(A->name, B->name);
}
void Insert(Node** Table, int N, int score, char* name) {
Table[N] = (Node*) malloc(sizeof(Node));
Table[N]->score = score;
Table[N]->name = (char*) malloc(101);
strcpy(Table[N]->name, name);
for (int i = N; i > 0; i--) {
int status = cmp(Table[i-1], Table[i]);
if (status > 0) {
Node* temp = Table[i-1];
Table[i-1] = Table[i];
Table[i] = temp;
}
else break;
}
}
void Delete(Node** Table, int N, char* name) {
for (int i = 0; i < N; i++) {
if (!strcmp(Table[i]->name, name)) {
Node* trash = Table[i];
for (int j = i+1; j < N; j++) {
Table[j-1] = Table[j];
}
Table[N-1] = NULL; // 第四筆沒過記得加這行
free(trash->name); // 記得free不然會MLE
free(trash); // 記得free不然會MLE
break;
}
}
}
int* Top(Node** Table, int N, int x) {
int* arr = (int*) malloc(sizeof(int) * x);
for (int i = 0; i < x; i++) arr[i] = i;
return arr;
}
#endif
// By Utin
```
## Reference