1.looplinklist.h
#ifndef __LOOPLINKLIST__
#define __LOOPLINKLIST__
typedef int datatype;
typedef struct node{
union{
datatype text;
int len;
}data;
struct node *next;
}Looplinklist;
Looplinklist *creat_looplinklist();
void insert_head(Looplinklist *head,int num);
void insert_tail(Looplinklist *head,int num);
void show_looplinklist(Looplinklist *head);
void delete_head(Looplinklist *head);
void delete_tail(Looplinklist *head);
#endif
2.looplinklist.c
#include "./looplinklist.h"
#include <stdio.h>
#include <stdlib.h>
Looplinklist *creat_looplinklist(){
Looplinklist *head = (Looplinklist *)malloc(sizeof(Looplinklist));
if(NULL == head){
printf("头结点申请失败,链表创建失败\n");
return NULL;
}
head->data.len = 0;
head->next = head;
return head;
}
void insert_head(Looplinklist *head,int num){
Looplinklist *temp = (Looplinklist *)malloc(sizeof(Looplinklist));
temp->data.text = num;
temp->next = NULL;
if(NULL == temp){
printf("结点申请失败,头插入失败\n");
return;
}
temp->next = head->next;
head->next = temp;
head->data.len++;
return;
}
void insert_tail(Looplinklist *head,int num){
Looplinklist *temp = (Looplinklist *)malloc(sizeof(Looplinklist));
temp->data.text = num;
temp->next = NULL;
if(NULL == temp){
printf("结点申请失败,尾插入失败\n");
return;
}
Looplinklist *p = head;
while(p->next != head)
p=p->next;
temp->next = p->next;
p->next = temp;
head->data.len++;
return;
}
void delete_head(Looplinklist *head){
if(head->next == head){
printf("头删除失败,删除失败\n");
return;
}
Looplinklist *p=head->next;
head->next = p->next;
free(p);
p = NULL;
head->data.len--;
return;
}
void show_looplinklist(Looplinklist *head){
Looplinklist *p = head ->next;
if(head==p){
printf("空链表\n");
return;
}
while(p!=head){
printf("%d\t",p->data.text);
p=p->next;
}
putchar(10);
return;
}
void delete_tail(Looplinklist *head){
Looplinklist *p = head->next;
if(head==p){
printf("空链表\n");
return;
}
while(p->next->next != head)
p=p->next;
free(p->next->next);
p->next = head;
head->data.len--;
return;
}
3.main.c
#include <stdio.h>
#include "looplinklist.h"
int main(int argc, const char *argv[])
{
Looplinklist *head = creat_looplinklist();
insert_head(head,2);
insert_head(head,3);
insert_head(head,4);
insert_head(head,5);
insert_head(head,6);
insert_head(head,7);
insert_tail(head,1);
delete_head(head);
delete_tail(head);
show_looplinklist(head);
return 0;
}
4.doublelinklist.c
#include <stdio.h>
#include <stdlib.h>
#include "doublelinklist.h"
Doublelinklist *create_doublelinklist(){
Doublelinklist *head = (Doublelinklist *)malloc(sizeof(Doublelinklist));
if(NULL==head){
printf("申请空间失败,创建双向链表失败\n");
return NULL;
}
head->next = NULL;
head->prev = NULL;
head->data.len = 0;
return head;
}
void insert_head(Doublelinklist *head,int num){
Doublelinklist *temp = (Doublelinklist *)malloc(sizeof(Doublelinklist));
if(NULL==temp){
printf("申请空间失败,头插入失败\n");
return;
}
temp->next=NULL;
temp->prev=NULL;
temp->data.text=num;
temp->next=head->next;
head->next=temp;
if(temp->next!=NULL)
temp->next->prev=temp;
temp->prev=head;
head->data.len++;
return;
}
void insert_tail(Doublelinklist *head,int num){
Doublelinklist *p=head;
Doublelinklist *temp = (Doublelinklist *)malloc(sizeof(Doublelinklist));
if(NULL==temp){
printf("申请空间失败,尾插入失败\n");
return;
}
temp->next=NULL;
temp->prev=NULL;
temp->data.text=num;
while(p->next != NULL)
p=p->next;
temp->next= p->next;
p->next=temp;
temp->prev = p;
head->data.len++;
return;
}
void delete_head(Doublelinklist *head){
if(head->next == NULL){
printf("空链表\n");
return;
}
Doublelinklist *p = head->next;
head->next = p->next;
if(p->next!=NULL)
p->next->prev=head;
free(p);
p=NULL;
return;
}
void delete_tail(Doublelinklist *head){
if(head->next==NULL){
printf("空链表\n");
return;
}
Doublelinklist *p=head;
while(p->next!=NULL)
p=p->next;
p->prev->next=NULL;
free(p);
p=NULL;
return;
}
void insert(Doublelinklist *head,int num,int index){
Doublelinklist *temp=(Doublelinklist *)malloc(sizeof(Doublelinklist));
if(temp == NULL){
printf("空间申请失败,按位插入失败\n");
return;
}
temp->data.text = num;
temp->next=NULL;
temp->prev=NULL;
if(index<1||index>head->data.len+1)
{
printf("下标非法\n");
return;
}
Doublelinklist *p=head;
for(int i = 0;i<index-1;i++)
p=p->next;
temp->next=p->next;
p->next=temp;
temp->prev=p;
if(p->next != NULL)
temp->next->prev=temp;
head->data.len++;
return;
}
void delete(Doublelinklist *head,int index){
if(NULL==head->next){
printf("空链表\n");
return;
}
if(index<1||index>head->data.len)
{
printf("下标非法\n");
return;
}
Doublelinklist *p=head;
for(int i=0;i<index;i++)
p=p->next;
p->prev->next=p->next;
if(p->next!=NULL)
p->next->prev=p->prev;
free(p);
p=NULL;
head->data.len--;
return;
}
void show_doublelinklist(Doublelinklist *head){
Doublelinklist *p = head;
if(p->next==NULL){
printf("空链表\n");
return;
}
while(p->next!=NULL){
p=p->next;
printf("%d\n",p->data.text);
}
return;
}
5.doublelinklist.h
#ifndef __DLINKLIST__
#define __DLINKLIST__
typedef struct node{
union{
int text;
int len;
}data;
struct node* next;
struct node* prev;
}Doublelinklist;
Doublelinklist *create_doublelinklist();
void insert_head(Doublelinklist* head,int num);
void show_doublelinklist(Doublelinklist*head);
void insert_tail(Doublelinklist* head,int num);
void delete_head(Doublelinklist *head);
void delete_tail(Doublelinklist *head);
void insert(Doublelinklist *head,int num,int index);
void delete(Doublelinklist *head,int index);
void show_doublelinklist(Doublelinklist *head);
#endif
6.main.c
#include <stdio.h>
#include "./doublelinklist.h"
int main(int argc, const char *argv[])
{
Doublelinklist *head = create_doublelinklist();
insert_head(head,1);
insert_head(head,2);
insert_head(head,3);
insert_head(head,4);
insert_head(head,5);
insert_head(head,6);
insert_tail(head,0);
delete_head(head);
delete_tail(head);
insert(head,23,2);
delete(head,3);
show_doublelinklist(head);
return 0;
}