1.单向链表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Linklist.h"
Linklist* creat_linklist(void)
{
Linklist* head=(Linklist*)malloc(sizeof(Linklist));
if(head==NULL)
{
printf("创建结点失败\n");
}
head->next=NULL;
return head;
}
void insert_linklist(Linklist* head,int num)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
printf("创建结点失败\n");
return;
}
temp->test.data =num;
temp->next =NULL;
temp->next = head->next;
head->next = temp;
head->test.len++;
return;
}
void show_linklist(Linklist* head)
{
Linklist *p=head;
int a=head->test.len;
int b=0;
while(p->next!=NULL)
{
p=p->next;
printf("%d\n",p->test.data);
}
printf("%d\n",head->test.len);
printf("结束\n");
}
void delect_Head(Linklist* head)
{
if(head->next==NULL)
{
printf("链表为空");
return;
}
Linklist* temp=head->next;
head->next=head->next->next;
free(temp);
temp=NULL;
head->test.len--;
}
void insert_tail(Linklist* head,int num)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
printf("创建结点失败\n");
return;
}
temp->test.data=num;
temp->next=NULL;
if(head->next==NULL)
{
head->next=temp;
}
else
{
Linklist* p=head->next;
while(p->next!=NULL)
{
p=p->next;
}
p->next=temp;
}
head->test.len++;
}
void delect_tail(Linklist* head)
{
if(head->next==NULL)
{
printf("链表为空");
return;
}
Linklist* p=head->next;
if(p->next==NULL)
{
head->next=NULL;
free(p);
p=NULL;
head->test.len--;
return;
}
while(p->next->next!=NULL)
{
p=p->next;
}
free(p->next);
p->next=NULL;
head->test.len--;
}
void insert_position(Linklist* head,int number,int num)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
printf("创建结点失败\n");
return;
}
if(number>head->test.len)
{
printf("插入位置错误\n");
return;
}
temp->test.data=num;
temp->next=NULL;
Linklist* p=head;
for(int i=0;i<number-1;i++)
{
p=p->next;
}
temp->next=p->next;
p->next=temp;
head->test.len++;
}
void delect_position(Linklist* head,int number)
{
if(head->next==NULL)
{
printf("链表为空");
return;
}
if(number>head->test.len)
{
printf("删除位置错误\n");
return;
}
Linklist* p;
head->test.len--;
for(int i=0;i<number-1;i++)
{
head=head->next;
}
p=head->next;
head->next=head->next->next;
free(p);
p=NULL;
}
// void insert_sort(Linklist* head,int num)
// {
// Linklist *temp=(Linklist*)malloc(sizeof(Linklist));
// if(temp==0)
// {
// printf("创建节点失败\n");
// }
// temp->next=NULL;
// temp->test.data=num;
// temp->next=head->next;
// head->next=temp;
// head->test.len++;
// Linklist* p;
// p->next=head->next;
// int max=head->test.data;
// while(head->next!=NULL)
// {
// head=head->next;
// if(max<head->next->test.data)
// {
// max=head->next->test.data;
// }
// }
// }
void recycle_linklist(Linklist* head)
{
Linklist*p =NULL;
Linklist* head1=creat_linklist();
while(head->next!=NULL)
{
p=head->next;
head->next=p->next;
p->next=head1->next;
head1->next=p;
}
head->next=head1->next;
free(head1);
head1=NULL;
}
// void loop(Linklist* head)
// {
// Linklist* p=head;
// while(p->next!=NULL)
// {
// p=p->next;
// }
// p->next=head;
// }
// void loop_insert_head(Linklist* head,int num)
// {
// Linklist* p=head;
// while(p->next!=NULL)
// {
// p=p->next;
// }
// Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
// if(temp==NULL)
// {
// printf("创建结点失败\n");
// return;
// }
// temp=NULL;
// temp->test.data=num;
// temp->next=head;
// p->next=temp;
// head->test.len++;
// }
#include<stdio.h>
#include<stdlib.h>
#include"Linklist.h"
int main()
{
Linklist* head=creat_linklist();
insert_linklist(head,50);
insert_linklist(head,60);
insert_linklist(head,70);
show_linklist(head);
delect_Head(head);
show_linklist(head);
insert_tail(head,80);
insert_tail(head,90);
insert_tail(head,100);
show_linklist(head);
delect_tail(head);
show_linklist(head);
insert_position(head,5,110);
show_linklist(head);
delect_position(head,5);
show_linklist(head);
// insert_sort(head,120);
// show_linklist(head);
recycle_linklist(head);
show_linklist(head);
// loop(head);
loop_insert_head(head,150);
show_linklist(head);
}
#ifndef _LINKLIST_
#define _LINKLIST_
typedef struct linklist
{
union
{
int data;
int len;
}test;
struct linklist* next;
}Linklist;
Linklist* creat_linklist(void);
void insert_linklist(Linklist* head,int num);
void show_linklist(Linklist* p);
void delect_Head(Linklist* head);
void delect_tail(Linklist* head);
void insert_tail(Linklist* head,int num);
void insert_position(Linklist* head,int number,int num);
void delect_position(Linklist* head,int number);
void insert_sort(Linklist* head,int num);
void recycle_linklist(Linklist* head);
void loop(Linklist* head);
void loop_insert_head(Linklist* head,int num);
#endif
单向循环链表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "DLinklist.h"
Linklist* creat_linklist(void)
{
Linklist* head=(Linklist*)malloc(sizeof(Linklist));
if(head==NULL)
{
printf("创建结点失败\n");
}
head->next=NULL;
head->next=head;
return head;
}
void loop_insert_head(Linklist* head,int num)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
printf("创建结点失败\n");
return;
}
temp->test.data=num;
temp->next=NULL;
temp->next=head->next;
head->next=temp;
head->test.len++;
}
void loop_insert_tail(Linklist* head,int num)
{
Linklist* p=head;
while(p->next!=head)
{
p=p->next;
}
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
printf("创建结点失败\n");
return;
}
temp->test.data=num;
temp->next=head;
p->next=temp;
head->test.len++;
}
void loop_delete_head(Linklist* head)
{
if(head->next==head)
{
printf("空链表\n");
}
Linklist* temp=head->next;
head->next=head->next->next;
free(temp);
head->test.len--;
}
void loop_delete_tail(Linklist* head)
{
Linklist* p=head;
while(p->next->next!=head)
{
p=p->next;
}
Linklist* temp=p->next;
p->next=head;
free(temp);
head->test.len--;
}
void show_linklist(Linklist* head)
{
Linklist *p=head;
while(p->next!=head)
{
p=p->next;
printf("%d\n",p->test.data);
}
printf("结束\n");
}
#ifndef _LINKLIST_
#define _LINKLIST_
typedef struct linklist
{
union
{
int data;
int len;
}test;
struct linklist* next;
}Linklist;
Linklist* creat_linklist(void);
void loop_insert_head(Linklist* head,int num);
void show_linklist(Linklist* head);
void loop_insert_tail(Linklist* head,int num);
void loop_delete_head(Linklist* head);
void loop_delete_tail(Linklist* head);
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "DLinklist.h"
int main()
{
Linklist *head=creat_linklist();
loop_insert_head(head,1);
loop_insert_head(head,2);
loop_insert_head(head,3);
show_linklist(head);
loop_insert_tail(head,4);
loop_insert_tail(head,5);
loop_insert_tail(head,6);
show_linklist(head);
loop_delete_head(head);
show_linklist(head);
loop_delete_tail(head);
show_linklist(head);
}
3.双向链表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Dloop.h"
Linklist* creat_linklist(void)
{
Linklist* head=(Linklist*)malloc(sizeof(Linklist));
if(head==NULL)
{
printf("创建结点失败\n");
}
head->next=NULL;
head->prev=NULL;
return head;
}
void insert_linklist_head(Linklist* head,int num)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
printf("创建节点失败");
return;
}
temp->test.data=num;
temp->next=NULL;
temp->prev=NULL;
temp->next=head->next;
head->next=temp;
temp->prev=head;
if(temp->next!=NULL)
{
temp->next->prev=temp;
}
head->test.len++;
}
void insert_linklist_tail(Linklist* head,int num)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
printf("创建节点失败");
return;
}
Linklist* p=head;
while(p->next!=NULL)
{
p=p->next;
}
temp->test.data=num;
temp->next=NULL;
temp->prev=NULL;
p->next=temp;
temp->prev=p;
head->test.len++;
}
void show_linklist(Linklist* head)
{
Linklist* p=head->next;
while(p!=NULL)
{
printf("%d ",p->test.data);
p=p->next;
}
printf("完成\n");
}
void delete_linklist_head(Linklist* head)
{
Linklist* p=head->next;
if(head->next==NULL)
{
printf("链表为空\n");
return;
}
head->next->next->prev=head;
head->next=head->next->next;
free(p);
head->test.len--;
}
void delete_linklist_tail(Linklist* head)
{
Linklist* p=head->next;
if(head->next==NULL)
{
printf("链表为空\n");
return;
}
while(p->next!=NULL)
{
p=p->next;
}
p->prev->next=NULL;
free(p);
head->test.len--;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Dloop.h"
int main()
{
Linklist *head = creat_linklist();
insert_linklist_head(head,1);
insert_linklist_head(head,2);
insert_linklist_head(head,3);
show_linklist(head);
insert_linklist_tail(head,4);
insert_linklist_tail(head,5);
insert_linklist_tail(head,6);
show_linklist(head);
delete_linklist_head(head);
show_linklist(head);
delete_linklist_tail(head);
show_linklist(head);
}
#ifndef _LINKLIST_
#define _LINKLIST_
typedef struct linklist
{
union
{
int data;
int len;
}test;
struct linklist* next;
struct linklist* prev;
}Linklist;
Linklist* creat_linklist(void);
void insert_linklist_head(Linklist* head,int num);
void insert_linklist_tail(Linklist* head,int num);
void show_linklist(Linklist* head);
void delete_linklist_head(Linklist* head);
void delete_linklist_tail(Linklist* head);
#endif