单向循环列表
主函数
#include <stdio.h>
#include "./13_looplinklist.h"
int main(int argc, const char *argv[])
{
Looplinklist* head = cj_looplinklist();
toucha_looplinklist(head,27);
toucha_looplinklist(head,18);
toucha_looplinklist(head,59);
toucha_looplinklist(head,69);
bl_looplinklist(head);
weicha_looplinklist(head,270);
weicha_looplinklist(head,180);
bl_looplinklist(head);
toushan_looplinklist(head);
bl_looplinklist(head);
weishan_looplinklist(head);
bl_looplinklist(head);
return 0;
}
功能函数
#include <stdio.h>
#include <stdlib.h>
#include "./13_looplinklist.h"
Looplinklist* cj_looplinklist(void)//创建一个空的循环链表
{
Looplinklist* head = (Looplinklist* )malloc(sizeof(Looplinklist));
if(head == NULL )
{
printf("头结点申请失败,创建单链表失败\n");
return NULL;
}
head->text.len = 0;
head->next = head;
return head;
}
int toucha_looplinklist(Looplinklist* head,Datatype num)//头插法插入数据
{
Looplinklist* temp = (Looplinklist* )malloc(sizeof(Looplinklist));
if(NULL == temp)
{
printf("头插失败\n");
return -1;
}
temp->text.data = num;
temp->next = NULL;
temp->next = head->next;
head->next = temp;
head->text.len++;
return 0;
}
int weicha_looplinklist(Looplinklist* head, Datatype num)//尾插法插入数据
{
Looplinklist* temp = (Looplinklist* )malloc(sizeof(Looplinklist));
if(NULL == temp)
{
printf("尾插失败\n");
return -1;
}
temp->next = NULL;
temp->text.data = num;
Looplinklist* p = head;
while(p->next != head)
{
p = p->next;
}
p->next = temp;
temp->next = head;
head->text.len--;
return 0;
}
int pankong_looplinklist(Looplinklist* head)//判空
{
return head->next == NULL?1:0;
}
int toushan_looplinklist(Looplinklist* head)//从头部删除数据
{
if(pankong_looplinklist(head))
{
printf("删除失败,链表为空\n");
return (Datatype)-1;
}
Looplinklist* temp = head->next;
head->next = head->next->next;
free(temp);
temp = head;
head->text.len--;
return 0;
}
Datatype weishan_looplinklist(Looplinklist* head)//从尾部删除数据
{
if(pankong_looplinklist(head))
{
printf("删除失败,链表为空\n");
return (Datatype)-1;
}
Looplinklist* temp = head;
while(temp->next->next != head)
{
temp =temp->next;
}
free(temp->next);
temp->next = head;
head->text.len;
return 0 ;
}
/*void ysf_looplinklist(Looplinklist* head1)
{
Looplinklist* p = head1;
int i;
for(i = 0;i<2 ; i++)
}
*/
void bl_looplinklist(Looplinklist* head)//遍历
{
Looplinklist *p = head;
while(p->next != head)
{
p = p->next;
printf("%d ",p->text.data);
}
putchar(10);
return;
}
头文件
#ifndef __LOOP_H__
#define __LOOP_H__
typedef int Datatype;
union msg
{
Datatype data;
int len;
};
typedef struct node
{
union msg text;
struct node* next;
}Looplinklist;
Looplinklist* cj_looplinklist(void);
int toucha_looplinklist(Looplinklist* dead,Datatype num);
int weicha_looplinklist(Looplinklist* head, Datatype num);
int pankong_looplinklist(Looplinklist* head);
void bl_looplinklist(Looplinklist* head);
int toushan_looplinklist(Looplinklist* head);
Datatype weishan_looplinklist(Looplinklist* head);
#endif
双向链表
主函数
#include <stdio.h>
#include "./23_doublelinklist.h"
int main(int argc, const char *argv[])
{
Doublelinklist* head = cj_dooublelinklist();
toucha_doublelinklist(head,27);
toucha_doublelinklist(head,59);
toucha_doublelinklist(head,80);
bl_doublelinklist(head);
weicha_doublelinklist(head,270);
weicha_doublelinklist(head,180);
weicha_doublelinklist(head,690);
bl_doublelinklist(head);
wzcr_doublelinklist(head,2718,2);
bl_doublelinklist(head);
toushan_doublelinklist(head);
bl_doublelinklist(head);
weishan_doublelinklist(head);
bl_doublelinklist(head);
wzsc_doublelinklist(head,2);
bl_doublelinklist(head);
return 0;
}
功能函数
#include <stdio.h>
#include <stdlib.h>
#include "./23_doublelinklist.h"
Doublelinklist* cj_dooublelinklist(void)//创建带头结点的双链表
{
Doublelinklist* head = malloc(sizeof(Doublelinklist));
if(head == NULL )
{
printf("头结点申请失败,创建单链表失败\n");
return NULL;
}
head->text.len = 0;
head->next = NULL;
head->prev = NULL;
return head;
}
int pankong_doublelinklist(Doublelinklist* head)//判空
{
return head->next == NULL?1:0;
}
void toucha_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(pankong_doublelinklist(head) == 1)
{
temp->next = head->next;
head->next = temp;
temp->prev = head;
}
else
{
temp->next = head->next;
head->next = temp;
temp->next->prev = temp;
temp->prev = head;
}
head->text.len++;
printf("插入成功\n");
return;
}
void weicha_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;
}
temp->next = p->next ;
p->next = temp;
temp->prev = p;
head->text.len++;
printf("插入成功\n");
return;
}
void wzcr_doublelinklist(Doublelinklist* head, Datatype num, int pos)//按位置插入数据
{
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;
int i;
for(i=0;i<pos-1;i++)
{
p = p->next;
}
if(p->next != NULL)
{
temp->next = p->next;
p->next = temp;
temp->next->prev = temp;
temp->prev = p;
}
else
{
temp->next = NULL;
p->next = temp;
temp->prev = p;
}
head->text.len++;
printf("插入成功\n");
return;
}
void toushan_doublelinklist(Doublelinklist* head)//从头部删除数据
{
if(head->next == NULL)
{
printf("链表为空,删除失败\n");
}
else
{
Doublelinklist *p = head->next;
head->next = head->next->next;
p->next->prev = head;
free(p);
if(p->next == NULL)
{
head->next = NULL;
free(p);
}
}
head->text.len--;
printf("删除成功\n");
return;
}
void weishan_doublelinklist(Doublelinklist* head)//删除尾部数据
{
if(head->next == NULL)
{
printf("链表为空,不能删除\n");
}
Doublelinklist* p = head->next;
while(p->next != NULL)
{
p = p->next;
}
p->prev->next= NULL;
free(p);
head->text.len--;
printf("删除成功\n");
return;
}
void wzsc_doublelinklist(Doublelinklist* head,int pos)//按位置删除数据
{
if(head->next == NULL)
{
printf("链表为空,不能删除\n");
}
Doublelinklist *p = head;
if(p->next != NULL)
{
for(int i= 0;i<pos;i++)
{
p = p->next;
}
p->prev->next = p->next;
p->next->prev = p->prev;
free(p);
}
else
{
p->prev->next = NULL;
free(p);
}
printf("删除成功\n");
head->text.len--;
return;
}
void bl_doublelinklist(Doublelinklist* head)//遍历链表
{
Doublelinklist *p = head;
while(p->next != NULL )
{
p = p->next;
printf("%d ", p->text.data);
}
putchar(10);
return;
}
头文件
#ifndef __LOOP_H__
#define __LOOP_H__
typedef int Datatype;
union msg
{
Datatype data;
int len;
};
typedef struct node
{
union msg text;
struct node* next;
struct node* prev;
}Doublelinklist;
Doublelinklist* cj_dooublelinklist(void);
void toucha_doublelinklist(Doublelinklist* head, Datatype num);
void bl_doublelinklist(Doublelinklist* head);
void weicha_doublelinklist(Doublelinklist* head, Datatype num);
void wzcr_doublelinklist(Doublelinklist* head, Datatype num, int pos);
void toushan_doublelinklist(Doublelinklist* head);
void weishan_doublelinklist(Doublelinklist* head);
void wzsc_doublelinklist(Doublelinklist* head,int pos);
#endif