双向链表
主函数
#include <stdio.h>
#include "./doublefunc.h"
int main(int argc, const char *argv[])
{
doublelinkList *head=create_doublelinkList();
inserthead_doublelinklist(head,4);
inserthead_doublelinklist(head,5);
inserthead_doublelinklist(head,45);
inserthead_doublelinklist(head,445);
inserthead_doublelinklist(head,78);
inserthead_doublelinklist(head,15);
inserthead_doublelinklist(head,47);
show_doublelinkList(head);
inserthend_doublelinklist(head,56);
show_doublelinkList(head);
dataType s=deletehead_doublelinkList(head);
printf("删除%d\n",s);
show_doublelinkList(head);
insertbypos_doublelinklist(head,1,52);
insertbypos_doublelinklist(head,9,72);
show_doublelinkList(head);
int sr=deletehend_doublelinkList(head);
printf("尾删%d\n",sr);
show_doublelinkList(head);
int ssr=deletebypos_doublelinklist(head,1);
printf("按位删%d\n",ssr);
show_doublelinkList(head);
return 0;
}
封装函数
nclude <stdio.h>
nclude "./doublefunc.h"
nclude <stdlib.h>
创建一个带头结点的空链表
ublelinkList* create_doublelinkList()
doublelinkList*head =(doublelinkList*)malloc(sizeof(doublelinkList));
if(NULL==head)
{
printf("头结点申请失败\n");
return NULL;
}
head->text.len=0;
head->next=NULL;
head->prev=NULL;
return head;
头插法
id inserthead_doublelinklist(doublelinkList*head,dataType num)
doublelinkList *temp=(doublelinkList*)malloc(sizeof(doublelinkList));
if(NULL==temp)
{
printf("插入失败\n");
return;
}
temp->text.data=num;
temp->next=NULL;
temp->prev=NULL;
if(head->next==NULL)
{
temp->next=head->next;
temp->prev=head;
head->next=temp;
}
else
{
temp->next=head->next;
temp->next->prev=temp;
temp->prev=head;
head->next=temp;
}
(head->text.len)++;
return ;
遍历输出
id show_doublelinkList(doublelinkList*head)
doublelinkList *p=head;
while (p->next!=NULL)
{
p=p->next;
printf("%d ",p->text.data);
}
printf("\n");
printf("长度%d\n",head->text.len);
尾插法
id inserthend_doublelinklist(doublelinkList*head,dataType num)
doublelinkList *temp=(doublelinkList*)malloc(sizeof(doublelinkList));
if(NULL==temp)
{
printf("插入失败\n");
return;
}
temp->text.data=num;
temp->next=NULL;
temp->prev=NULL;
doublelinkList *p=head;
while(p->next!=NULL)
{
p=p->next;
}
if(head->next==NULL)
{
temp->next=NULL;
temp->prev=p;
p->next=temp;
}
else
{
temp->next=NULL;
temp->prev=p;
p->next=temp;
}
(head->text.len)++;
return ;
头删法
taType deletehead_doublelinkList(doublelinkList*head)
if(head->next==NULL)
{
printf("删除失败\n");
return (dataType)-1;
}
doublelinkList*p=head;
p=p->next;
p->next->prev=head;
head->next=p->next;
dataType num=p->text.data;
free(p);
p=NULL;
head->text.len--;
return (dataType)num;
按位置插入
id insertbypos_doublelinklist(doublelinkList*head,int pos,dataType num)
doublelinkList *temp=(doublelinkList*)malloc(sizeof(doublelinkList));
if(NULL==temp)
{
printf("插入失败\n");
return;
}
temp->text.data=num;
temp->next=NULL;
temp->prev=NULL;
if(pos<1||pos>head->text.len+1)
{
printf("插入位置非法\n");
return;
}
doublelinkList *p=head;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
if(p->next==NULL)
{
temp->next=p->next;
temp->prev=p;
p->next=temp;
}
else
{
temp->next=p->next;
temp->next->prev=temp;
temp->prev=p;
p->next=temp;
}
(head->text.len)++;
return ;
尾删
taType deletehend_doublelinkList(doublelinkList*head)
if(head->next==NULL)
{
printf("删除失败\n");
return (dataType)-1;
}
doublelinkList*p=head;
while(p->next->next!=NULL)
{
p=p->next;
}
dataType num=p->next->text.data;
free(p->next);
p->next=NULL;
head->text.len--;
return (dataType)num;
按照位置删除
taType deletebypos_doublelinklist(doublelinkList*head,int pos)
if(pos<1||pos>head->text.len)
{
printf("删除位置非法\n");
return (dataType)-1;
}
doublelinkList *p=head;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
dataType num;
if(p->next==NULL)
{
num=p->next->text.data;
free(p->next);
p->next=NULL;
}
else
{
doublelinkList*s=p->next;
num=s->text.data;
s->next->prev=p;
p->next=s->next;
free(s);
s=NULL;
}
(head->text.len)--;
return (dataType)num;
头文件
#ifndef __func_H__
#define __func_H__
typedef int dataType;
union msg{
dataType data;
int len;
};
typedef struct node{
union msg text;
struct node *next;
struct node *prev;
}doublelinkList;
doublelinkList*create_doublelinkList();
void inserthead_doublelinklist();
void show_doublelinkList();
void inserthend_doublelinklist();
dataType deletehead_doublelinkList();
void insertbypos_doublelinklist();
dataType deletehend_doublelinkList();
dataType deletebypos_doublelinklist();
#endif
单向循环链表
主函数
#include <stdio.h>
#include "./func.h"
int main(int argc, const char *argv[])
{
loopList*head=create_loopList();
inserthead_looplist(head,1);
inserthead_looplist(head,5);
inserthead_looplist(head,9);
inserthead_looplist(head,44);
inserthead_looplist(head,145);
show_loopList(head);
insertend_looplist(head,45);
show_loopList(head);
dataType s=deletehead_loopList(head);
show_loopList(head);
printf("删除%d\n",s);
dataType ss=deleteend_loopList(head);
show_loopList(head);
printf("尾删删除%d\n",ss);
return 0;
}
头文件
#ifndef __func_H__
#define __func_H__
typedef int dataType;
union msg{
dataType data;
int len;
};
typedef struct node{
union msg text;
struct node *next;
}loopList;
loopList*create_loopList();
void inserthead_looplist();
void show_loopList();
void insertend_looplist();
dataType deletehead_loopList();
dataType deleteend_loopList();
#endif
封装函数
#include <stdio.h>
#include "./func.h"
#include <stdlib.h>
//创建一个带头结点的空链表
loopList* create_loopList()
{
loopList*head =(loopList*)malloc(sizeof(loopList));
if(NULL==head)
{
printf("头结点申请失败\n");
return NULL;
}
head->text.len;
head->next=head;
return head;
}
//头插法
void inserthead_looplist(loopList*head,dataType num)
{
loopList *temp=(loopList*)malloc(sizeof(loopList));
if(NULL==temp)
{
printf("插入失败\n");
return;
}
temp->text.data=num;
temp->next=NULL;
temp->next=head->next;
head->next=temp;
(head->text.len)++;
return ;
}
//遍历输出
void show_loopList(loopList*head)
{
loopList *p=head;
while (p->next!=head)
{
p=p->next;
printf("%d ",p->text.data);
}
printf("\n");
printf("长度%d\n",head->text.len);
}
//尾插法
void insertend_looplist(loopList*head,dataType num)
{
loopList *temp=(loopList*)malloc(sizeof(loopList));
if(NULL==temp)
{
printf("失败\n");
return;
}
temp->next=NULL;
temp->text.data=num;
loopList*p=head;
while(p->next !=head)
{
p=p->next;
}
temp->next=p->next;
p->next=temp;
(head->text.len)++;
}
//头删法
dataType deletehead_loopList(loopList*head)
{
loopList *p=head;
p=p->next;
head->next=p->next;
dataType num=p->text.data;
free(p);
p=NULL;
head->text.len--;
return (dataType)num;
}
//尾删法
dataType deleteend_loopList(loopList*head)
{
loopList*p=head;
while(p->next->next!=head)
{
p=p->next;
}
loopList*q=p->next;
p->next=q->next;
dataType num=q->text.data;
free(q);
q=NULL;
head->text.len--;
return (dataType)num;
}