一、可变数组
- 基本操作
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int size;
int *array;
} Array;
Array create_array(int init_size)
{
Array a;
a.size=init_size;
a.array=(int*)malloc(sizeof(int)*a.size);
return a;
}
void free_array(Array *a)
{
free(a->array);
a->array=NULL; //保险起见
a->size=0;
}
int array_size(Array *a)
{
return a->size;
}
int* search_array(Array *a,int index)
{
return &(a->array[index]);
}
int array_get(Array *a,int index)
{
return a->array[index];
}
void array_set(Array *a,int index, int value)
{
a->array[index]=value;
}
int main()
{
Array a=create_array(100);
*search_array(&a,1)=10; //给a[0]赋值
printf("%d\n",array_size(&a));
printf("%d\n",*search_array(&a,1));
}
- 可变数组
void array_inflate(Array *a, int addsize)
{
int *p;
p=(int*)malloc(sizeof(int)*(a->size+addsize));
for(int i=0;i<a->size;i++)
p[i]=a->array[i];
free(a->array);
a->array=p;
a->size+=addsize;
}
在search中加入inflate
#define BLOCK 20;
int* search_array(Array *a,int index)
{
if(index>a->size)
{
array_inflate(a,(index/BLOCK+1)*BLOCK-a->size);
}
return &(a->array[index]);
}
二、链表
初始:
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int value;
struct node *next;
} Node;
typedef struct list{
Node *H;
Node *T;
} List;
void addNode(List *list,int n)
{
Node *p=(Node*)malloc(sizeof(Node));
p->next=NULL;
scanf("%d",p->value);
list->H=p;
list->T=p;
for(int i=1;i<n;i++)
{
Node *p=(Node*)malloc(sizeof(Node));
p->next=NULL;
scanf("%d",p->value);
list->T->next=p;
list->T=p;
}
}
void printNode(List *list)
{
Node *p;
for(p=list->H;p;p=p->next)
printf("%d",p->value);
}
void deleteNode(List *list, int value)
{
Node *p,*q;
for(q=NULL,p=list->H;p;q=p,p=p->next)
{
if(p->value==value)
{
if(q)
{
q->next=p->next;
}
else
{
list->H=p->next;
}
free(p);
break;
}
}
}
void clearList(List *list)
{
for(p=list->H;p;p=q)
{
q=p->next;
free(p);
}
}