结构体实现可变数组 链表

一、可变数组

  • 基本操作
#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);
	}
} 




猜你喜欢

转载自blog.csdn.net/scarletteshu/article/details/79595415