学习了一下数据结构的线性链表,自己实现了一下顺序链表的算法。测试完了,删除觉得可惜,留下也不知道有什么用,放到这里吧。也许会对某些人有启发。谢谢参考,共同学习。
#include <stdio.h>
#include <alloc.h>
typedef struct array_list
{
int *datas;
int volume;
int length;
}array_list;
void visit(int number)
{
printf("%d\t",number);
}
int compare(int a,int b)
{
return a==b?1:0;
}
void init_array_list(array_list *list)
{
(*list).volume=20;
(*list).datas=(int*)malloc(sizeof(int)*(*list).volume);
(*list).length=0;
}
void destroy_list(array_list *list)
{
free((*list).datas);
}
void clear_list(array_list *list)
{
(*list).length=0;
}
int list_is_empty(array_list *list)
{
return (*list).length>0?0:1;
}
int list_length(array_list *list)
{
return (*list).length;
}
void get_element(array_list *list,int index,int *data)
{
if(index>=0&&index<=(*list).length)
{
*data=(*list).datas[index];
}
else
{
*data=-1;
}
}
int locate_element(array_list *list,int e,int (*pfun)(int a,int b))
{
int index=0;
for(index=0;index<(*list).length;index++)
{
if(pfun(e,(*list).datas[index]))
{
return index;
}
}
return -1;
}
void prior_element(array_list *list,int element,int *prior)
{
int index=1;
for(index=1;index<(*list).length;index++)
{
if((*list).datas[index]==element)
{
*prior=(*list).datas[index-1];
return ;
}
}
*prior=-1;
}
void next_element(array_list *list,int element,int *next)
{
int index=0;
for(index=0;index<(*list).length-1;index++)
{
if((*list).datas[index]==element)
{
*next=(*list).datas[index+1];
return ;
}
}
*next=-1;
}
void insert_list(array_list *list,int index,int element)
{
int *next_datas=NULL;
int move_index=0;
if((*list).length==(*list).volume)
{
next_datas=(int*)malloc(sizeof(int)*(*list).volume*2);
for(;move_index<(*list).length;move_index++)
{
next_datas[move_index]=(*list).datas[move_index];
}
free((*list).datas);
(*list).datas=next_datas;
(*list).volume=(*list).volume*2;
}
(*list).datas[index]=element;
(*list).length++;
}
void delete_list(array_list *list,int index,int *element)
{
int move_index=0;
if(index<0||index>(*list).length)
{
return;
}
*element=(*list).datas[index];
for(move_index=index;move_index<(*list).length;move_index++)
{
(*list).datas[index]=(*list).datas[index+1];
}
(*list).length--;
}
void traverse_list(array_list *list,void (*ptr)(int number))
{
int index=0;
for(index=0;index<(*list).length;index++)
{
ptr((*list).datas[index]);
}
}
int main()
{
int index=0;
int data;
array_list list;
init_array_list(&list);
for(index=0;index<100;index++)
{
insert_list(&list,index,index);
}
delete_list(&list,0,&data);
printf("\n%d",data);
delete_list(&list,19,&data);
printf("\n%d",data);
traverse_list(&list,visit);
printf("\n%d",list.length);
printf("\n%d",locate_element(&list,45,compare));
destroy_list(&list);
return 0;
}
干净没有注释,短小不是函数。