转载请附上:https://blog.csdn.net/qq_37978862/article/details/104597432
1.示例
#include<stdio.h>
#include<stdlib.h>
typedef int data_t ;
typedef struct link
{
data_t data;
struct link* next;
}link;
//按位置插入
int position_insert(link* l,int pose,data_t d)
{
if( pose<=0 || pose>link_length(l)+1 )
{
perror("insert");
return -1;
}
//找到待插位置的前一个结点
//找位置
while(--pose)
l = l->next;
//创建新节点并指向现有位置的下一项
link *new = (link *) malloc(sizeof(link));
new->data = d;
new->next = l->next;
//将新节点挂在原链表上
l->next = new;
return 1;
}
//按递增的次序插入
int up_insert(link *l,data_t d)
{
//既要保证有下一个结点 又要保证数据大于下一个的数据
while( d > l->next->data && l->next != NULL)
l = l->next;
link* new = (link *)malloc(sizeof(link));
new ->data = d;
new ->next = l->next;
l->next = new;
}
//删除某个位置的节点
int delete_poseition(link *l,int pose)
{
//判断位置是否合法
if( pose<=0 || pose > link_length(l) || empty_link(l))
{
perror("delete position");
return -1;
}
while(--pose)
l = l->next;
link *p = l->next;
l->next = p->next;
free(p);
return 1;
}
//删除值为value的节点
void delete_data(link* l,data_t d)
{
while (l->next != NULL)
{
if( l->next->data == d )
{
link* p = l->next;
l->next = p->next;
free(p);
}
else
{
l = l->next;
}
}
}
//查找是否有值为data的结点,有返回编号
int search_data(link *l,data_t d)
{
int number = 0;
while (l->next != NULL)
{
number++;
l = l->next;
if( l->data == d )
{
return number;
}
}
return -1;
}
//获取某个位置的值
int search_position(link* l,int pose)
{
if( pose<=0 || pose > link_length(l) )
{
perror("search position");
return -1;
}
while( pose-- )
l = l->next;
return l->data;
}
//清空链表
void clear_link(link *l)
{
link* p;
while ( l->next != NULL )
{
p = l->next;
l->next = p->next;
free(p);
}
}
//判空
int empty_link(link *l)
{
return (l->next == NULL);
}
//遍历
void printf_all(link* l)
{
while(l->next != NULL)
{
l = l->next;
printf("%d\n",l->data);
}
}
//求链表长度
int link_length(link *l)
{
int count = 0;
while(l->next != NULL)
{
l = l->next;
count++;
}
return count;
}
//创建空链表
link* create_link()
{
link* l = (link*)malloc(sizeof(link));
l->next = NULL;
return l;
}
int main()
{
link *l = create_link();
if( l != NULL)
{
position_insert(l,1,1);
position_insert(l,2,2);
position_insert(l,3,3);
position_insert(l,4,4);
position_insert(l,5,5);
position_insert(l,6,6);
printf_all(l);
printf("%d\n",link_length(l));
}
}