链表
代码 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>
//define typedef
//预编译的时候文字替换
typedef struct node{
int *data;
int last;
int size;
}list_t; // list_t --> struct node
//驼峰标记法 struct node --> NODE ; NODE
//不建议使用 编译器可能过不去,容易混淆
//创建
list_t* create_list(int size)
{
if(size<=0)
return NULL;
list_t* list=malloc(sizeof(list_t));
//堆区创建一个连续空间,返回首地址给list
//(list_t* )malloc(sizeof(list_t));
//windows 要求类型匹配
list->last=-1;
list->size=size;
list->data=malloc(sizeof(int)*size);
// -> .区别
// 结构体变量 访问成员 用.
// 指针 ->
return list;
}
//判满
int isfull(list_t* list)
{
if(list==NULL)
return 0;
// NULL --> (void *)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;
//free以后,malloc的空间理论上不可再使用,可能会出现野指针,赋值NULL是好习惯
return 0;
}