鏈表
代碼 1 :
#include <stdio.h>
typedef struct node{
int data[10];
int newdata[0];
}list_t;
int main(int argc, const char *argv[]){
list_t list;
printf("%d\n",sizeof(list_t));
printf("%p\n",&list);
printf("%p\n",list.data);
printf("%p\n",list.newdata);
int i;
for(i=0;i<=9;i++)
{
list.data[i]=i+1;
}
printf("%d\n",list.newdata[-1]);
return 0;
}
代碼 2 :
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int *data;
int last;
int size;
}list_t;
list_t* create_list(int size)
{
if(size<=0)
return NULL;
list_t* list=malloc(sizeof(list_t));
list->last=-1;
list->size=size;
list->data=malloc(sizeof(int)*size);
return list;
}
int isfull(list_t* list)
{
if(list==NULL)
return 0;
return list->last==list->size-1;
}
int isempty(list_t* list)
{
if(list==NULL)
return 0;
return list->last==-1;
}
int insert_head_list(list_t* list,int data)
{
if(list==NULL||isfull(list))
return -1;
int i;
for(i=list->last;i>=0;i--)
{
list->data[i+1]=list->data[i];
}
list->data[0]=data;
list->last++;
return 0;
}
int delete_head_list(list_t* list)
{
if(list==NULL||isempty(list))
return -1;
int i;
for(i=0;i<list->last;i++)
{
list->data[i]=list->data[i+1];
}
list->last--;
return 0;
}
int locate_list(list_t* list,int data)
{
if(list==NULL||isempty(list))
return -1;
int i;
for(i=0;i<=list->last;i++)
{
if(list->data[i]==data)
return i;
}
return -1;
}
int change_index_list(list_t* list,int index,int data)
{
if(list==NULL||isempty(list)||index<0||index>list->last)
return -1;
list->data[index]=data;
return 0;
}
int insert_index_list(list_t* list,int index,int data)
{
if(list==NULL||isfull(list)||index<0||index>list->last+1)
return -1;
int i;
for(i=list->last;i>=index;i--)
{
list->data[i+1]=list->data[i];
}
list->data[index]=data;
list->last++;
return 0;
}
int delete_index_list(list_t* list,int index)
{
if(list==NULL||isempty(list)||index<0||index>list->last)
return -1;
int i;
for(i=index;i<list->last;i++)
{
list->data[i]=list->data[i+1];
}
list->last--;
return 0;
}
int print_list(list_t* list)
{
if(list==NULL||isempty(list))
return -1;
int i;
for(i=0;i<=list->last;i++)
{
printf("%3d ",list->data[i]);
}
printf("\n");
return 0;
}
int re_print_list(list_t* list)
{
if(list==NULL||isempty(list))
return -1;
int i;
for(i=list->last;i>=0;i--)
{
printf("%3d ",list->data[i]);
}
printf("\n");
return 0;
}
int clear_list(list_t* list)
{
if(list==NULL)
return -1;
list->last=-1;
return 0;
}
int length_list(list_t* list)
{
if(list==NULL||isempty(list))
return 0;
return list->last+1;
}
int destory_list(list_t* list)
{
if(list==NULL)
return -1;
free(list);
return 0;
}
int main(int argc, const char *argv[])
{
list_t* list=create_list(30);
int i;
for(i=1;i<=15;i++)
{
if(insert_head_list(list,i)==0)
print_list(list);
}
change_index_list(list,locate_list(list,15),250);
insert_index_list(list,locate_list(list,13),230);
print_list(list);
delete_index_list(list,locate_list(list,230));
print_list(list);
printf("length_list:%d\n",length_list(list));
clear_list(list);
printf("length_list:%d\n",length_list(list));
destory_list(list);
list=NULL;
return 0;
}