目录
1.结构体设置
typedef int datatype;
typedef struct Link
{
datatype data;
struct Link *prev,*next;
}link;
2.初始化
//初始化
void link_init(link **node) //node=&head;
{
*node=(link *)malloc(sizeof(link)); //*node == *(&head) == head
(*node)->prev=NULL;
(*node)->next=NULL;
}
3.头插
// 头插
void link_insert_head(link *head,int elem)
{
link *node=(link *)malloc(sizeof(link));
node->data=elem;
if(head->next==NULL) //需要排除链表为空的特殊情况
{
node->prev=head;
node->next=head->next;
head->next=node;
}
else
{
node->prev=head;
node->next=head->next;
head->next->prev=node;
head->next=node;
}
}
4.遍历
// 遍历
void display(link *head)
{
link *temp=head->next;
while(temp!=NULL)
{
printf("%d >> ",temp->data);
temp=temp->next;
}
putchar('\n');
}
5.尾插
// 尾插
void link_insert_tail(link *head,int elem)
{
link *node=(link *)malloc(sizeof(link));
node->data=elem;
link *temp=head;
while(temp->next!=NULL) //需要注意删除的结点是最后一个结点的特殊情况
{
temp=temp->next;
}
node->prev=temp;
node->next=NULL;
temp->next=node;
}
6.删除
//删除
int link_del(link *head,int elem)
{
link *temp=head->next;
while(temp!=NULL)
{
if(temp->data == elem)
{
break;
}
temp=temp->next;
}
if(temp==NULL)
{
return -1;
}
else
{
if(temp->next==NULL)
{
temp->prev->next=temp->next;
}
else
{
temp->prev->next=temp->next;
temp->next->prev=temp->prev;
}
free(temp);
}
return 0;
}
7.查询某个数据的位置
// 查询某个数据的位置
int link_search(link *head,int elem)
{
link *temp=head->next;
int n=1;
while(temp!=NULL)
{
if(temp->data==elem)
{
return n;
}
temp=temp->next;
n++;
}
return -1;
}
8.修改某个数据为新的数据
// 修改某个数据为新的数据
void link_change(link *head,int elem,int newelem)
{
int add=link_search(head,elem);
link *temp=head;
int i;
for(i=0;i<add;i++) // 1 2 3 4 elem=3
{
temp=temp->next;
}
temp->data=newelem;
}
9.冒泡排序
// 冒泡排序
void link_bubble_sort(link *head)
{
int n=0;
link *temp=head->next;
while(temp!=NULL) // _ 1 2 3 4
{
n++;
temp=temp->next;
}
int i;
int t;
link *p,*q;
for(i=0;i<n;i++)
{
for(p=head->next,q=p->next;q!=NULL;p=p->next,q=q->next)
{
if(p->data>q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
}
}
}