數據結構

鏈表:指針方法,頭插法

#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
typedef struct List{
ListNode *head;
int size;
}List;
void BuildList(List *list)
{
if(list&&list->head == NULL)
{
list->head = (ListNode *)malloc(sizeof(ListNode));
list->head->next = NULL;
list->size = 0;
}
}
void Insert(List *list, int val)
{
if(list)
{
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->val = val;
node->next = list->head->next;
list->head->next = node;
list->size++;
}
}
void Delete(List *list, int val)
{
if(list&&list->head)
{
ListNode *p = list->head;
while(p->next)
{
if(p->next->val == val)
{
ListNode *q = p->next;
p->next = q->next;
free(q);
list->size--;
return;
}
p = p->next;
}
}
}
void PrintList(List *list)
{
if(list&&list->head)
{
ListNode *p = list->head->next;
printf("List: ");
while(p)
{
printf("%d ", p->val);
p = p->next;
}
printf("\n");

}
}
int main(void)
{
List list;
list.head = NULL;
list.size = 0;
BuildList(&list);
Insert(&list, 1);
Insert(&list, 2);
Insert(&list, 3);
PrintList(&list);
Delete(&list, 2);
PrintList(&list);
return 0;
}

image

 數組方法:

用e[idx]存儲值,ne[idx]存儲下一個目標

void add(int k,int val)

{

  e[idx] = val;

      ne[idx] = ne[k];

      ne[k] = idx;

}

void delete(int k)

{  

      int idx = head;

  //遍歷

     while(ne[idx) != -1)

     {

   if(ne[idx] == k)

      {

         ne[idx] = ne[k];

         break;

      }

      idx = ne[idx];

     }

}

實際中使用c++ vector,因為每次malloc(1)大小的太費時間,內存碎片化,會先malloc一大片空間