定义:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。
链表中单数据是以结点来表示的,每个结点的构成由:数据域+指针域。
单链表代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}link_list;
link_list *init_list() //链表初始化
{
// node=p;
link_list *node=NULL;
node=(link_list *)malloc(sizeof(link_list));
node->data=0;
node->next=NULL;
return node;
}
void head_list(link_list *p,int data) //链表头插法
{
link_list *node=NULL;
node=(link_list *)malloc(sizeof(link_list));
node->data=data;
node->next=p->next;
p->next=node;
//node->next=p->next;
p->data++;
}
int list_length(link_list *l) //计算链表长度
{
int i=0;
link_list *p=NULL;
p=l->next; //
while(p!=NULL)
{
p=p->next;
i++;
}
return i;
}
int list_searth(link_list *l,int i) //查询链表元素的位置具体值
{
int j=1;
link_list *p=NULL;
p=l->next;
while(p!=NULL && j<i)
{
p=p->next;
++j;
}
if(p==NULL || j>i)
{
printf("no data\n");
return -1;
}
return p->data;
}
void nail_list(link_list *p,int data) //链表尾插法
{
// p->data++;
link_list *node=p;
int i=0;
for(i=0;i< p->data;i++)
{
node =node->next;
}
link_list *n=(link_list *)malloc(sizeof(link_list));
n->data=data;
n->next=NULL;
node->next=n;
p->data++;
}
void print_list(link_list *p) //链表打印
{
link_list *node=NULL;
node=p->next;
while(node)
{
printf("data=%d\n",node->data);
node=node->next;
}
}
int delet_list(link_list *p,int data) //链表删除
{
link_list *node=p->next;
link_list *prenode=p;
while(node)
{
if(node->data==data)
prenode->next =node->next;
free(node);
p->data--;
return 1;
}
prenode=node;
node=node->next;
return 0;
}
int main() //主函数
{
link_list *l=init_list();
head_list(l,1);
head_list(l,2);
head_list(l,3);
head_list(l,4);
head_list(l,5);
nail_list(l,8);
nail_list(l,9);
print_list(l);
printf("lenth=%d\n",list_length(l));
// l= list_searth(l,3);
printf("searth data is=%d\n",list_searth(l,2));
free(l);
return 0;
}