数据结构,链表的简单使用
任意位置删除:
void Any_Del(LinkListPtr h,int a)//任意删
{
if(NULL==h||a>h->len)
{
printf("删除失败");
}
LinkListPtr p=h;
for(int i=0;i<a-1;i++)
{
p=p->next;
}
LinkListPtr p2=p;
p2=p2->next;
p->next=p->next->next;
free(p2);
p2=NULL;
h->len--;
return;
}
按位置修改:
void Any_Change(LinkListPtr h,DataType a,int b)//任意修改
{
if(NULL==h||b>h->len)
{
printf("修改失败");
return ;
}
LinkListPtr p=h;
for(int i=0;i<b-1;i++)
{
p=p->next;
}
p->next->data=a;
return ;
}
按值查找,返回地址
LinkListPtr search(LinkListPtr h,int a)//按值查找,返回地址
{
if(NULL==h||empt(h))
{
printf("查找失败");
return NULL;
}
LinkListPtr p=h;
while(p->next!=NULL)
{
if(p->data==a)
{
return p;
}
p=p->next;
}
}
反转:
void Severse(LinkListPtr h)//反转输出
{
if(NULL==h||empt(h))
{
printf("反转失败");
return;
}
LinkListPtr p=h;
LinkListPtr temp=NULL;
while(p->next!=NULL)
{
p=p->next;
}
temp=p;
p=h;
for(int i=0;i<h->len-1;i++)
{
p=h;
for(int j=0;j<h->len-i-1;j++)
{
p=p->next;
}
p->next->next=p;
}
h->next=temp;
p->next=NULL;
show(h);
return;
temp=NULL;
p=NULL;
}
销毁:
void My_free(LinkListPtr h)
{
if(NULL==h)
{
printf("销毁失败");
return ;
}
LinkListPtr p=h;
for(int i=0;i<h->len;i++)
{
p=h;
for(int j=0;j<h->len-i;j++)
{
p=p->next;
}
free(p->next);
p=NULL;
}
free(h);
h=NULL;
p=NULL;
printf("销毁成功\n");
return ;
}
测试文件:main
#include "3.h"
int main()
{
LinkListPtr h=caerte();
empt(h);
end_add(h,1);
end_add(h,2);
end_add(h,3);
end_add(h,4);
end_add(h,5);
end_add(h,6);
show(h);
putchar(10);
Any_Add(h,9,3);
show(h);
putchar(10);
Any_Del(h,1);
show(h);
putchar(10);
Any_Change(h,7,1);
show(h);
putchar(10);
LinkListPtr p=search(h,9);
printf("%p",p);
putchar(10);
Severse(h);
putchar(10);
My_free(h);
h=NULL;
return 0;
}
头文件引用:
#ifndef __3__
#define __3__
#include<stdio.h>
#include<stdlib.h>
#endif
typedef int DataType;
typedef struct node
{
union
{
int len;
DataType data;
};
struct node *next;
}LinkList,*LinkListPtr;
LinkListPtr caerte();
int empt(LinkListPtr h);
int head_add(LinkListPtr h,DataType a);
LinkListPtr caerte_node(DataType a);
void show(LinkListPtr h);
void end_add(LinkListPtr h,DataType a);
void Any_Add(LinkListPtr h,DataType a,int b);
void Any_Del(LinkListPtr h,int a);
void Any_Change(LinkListPtr h,DataType a,int b);
LinkListPtr search(LinkListPtr h,int a);
void Severse(LinkListPtr h);
void My_free(LinkListPtr h);
运行截图: