首先看main.c文件:
#include "dlinklist.h"
int main()
{
data_t arr1[50];
Dlinklist* L = Dlinklist_Creat();
Dlinklist_Insert_Head(L, 10);
Dlinklist_Show(L);
Dlinklist_Delete_pos(L, 5);
Dlinklist_Show(L);
Dlinklist_Add( L, 5, 6);//按位置添加数据
Dlinklist_Show(L);
int length = Dlinklist_find_Data(L, 6,arr1);
for (int i = 0; i <= length; i++)
{
printf(" %d ", arr1[i]);
}
Dlinklist_Show(L);
data_t arr[50];
data_t data;
scanf_s("%d", &data);
int len = Dlinklist_Delete_Data(L, data, arr);
for (int i = 0; i <= len; i++)
{
printf(" %d ", arr[i]);
}
Dlinklist_Show(L);
Dlinklist_Destory(&L);
Dlinklist_Show(L);
return 0;
}
dlinklist.c文件:
#include "dlinklist.h"
Dlinklist* Dlinklist_Creat()
{
Dlinklist* list = (Dlinklist*)malloc(sizeof(Dlinklist));
if (list==NULL)
{
printf("malloc failed!\n");
return NULL;
}
list->pointer = list;
list->next = list;
return list;
}
void Dlinklist_Insert_Head(Dlinklist* L,int n)//n表示多少个元素;从1开始
{
for (int i = 1; i < n+1; i++)
{
Dlinklist* p = (Dlinklist*)malloc(sizeof(Dlinklist));
if (p == NULL)
{
printf("malloc failed!\n");
return;
}
p->data = i;
p->pointer = L;
L->next->pointer = p;
p->next = L->next;
L->next = p;
}
}
void Dlinklist_Delete_pos(Dlinklist* L, int pos)
{
if (pos<0 || pos>10)
{
printf("por error!\n");
return;
}
Dlinklist* q = L->next;
for (int i = 0; i < 10; i++)
{
if (i == pos)
{
q->next->pointer = q->pointer;
q->pointer->next = q->next;
free(q);
q = NULL;
}
q = q->next;
}
return;
}
int Dlinklist_Delete_Data(Dlinklist* L, int data, data_t* arr)//按元素删除
{
Dlinklist* q = L;
int length=0;
for (int i = 0; i <= 10; i++)
{
if (data == q->data)
{
arr[length] = i;
q->next->pointer = q->pointer;
q->pointer->next = q->next;
free(q);
q = NULL;
length++;
}
q = q->next;
}
return length;
}
void Dlinklist_Add(Dlinklist* L, int pos, data_t data)//按位置添加数据
{
if (pos<0 || pos>10+1)
{
printf("por error!\n");
return;
}
Dlinklist* q = L;
for (int i = 0; i <= 10; i++)
{
if (i == pos)
{
Dlinklist* p = (Dlinklist*)malloc(sizeof(Dlinklist));
if (p == NULL)
{
printf("malloc failed!\n");
return;
}
p->data = data;
p->pointer = q;
q->next->pointer = p;
p->next = q->next;
q->next = p;
}
q = q->next;
}
}
data_t Dlinklist_Find_Pos(Dlinklist* L, int pos)//按位置查找元素
{
if (pos<0 || pos>10)
{
printf("por error!\n");
return NULL;
}
Dlinklist* q = L;
for (int i = 0; i < pos; i++)
{
if (i == pos)
{
data_t data = q->data;
return data;
}
q = q->next;
}
}
int Dlinklist_find_Data(Dlinklist* L,data_t data, int arr1[])//按元素查找,arr1数组存放元素位置
{
Dlinklist* q = L;
int length = 0;
for (int i = 0; i < 10; i++)
{
if (q->data == data)
{
arr1[length] = i;
length++;
}
q = q->next;
}
return length;
}
void Dlinklist_Clear(Dlinklist* L)//清空
{
while (L->next != L)
{
Dlinklist* q = L->next;
L->next = q->next;
q->next->pointer = L;
free(q);
q = NULL;
}
return;
}
void Dlinklist_Destory(Dlinklist**L)//销毁
{
Dlinklist_Clear(*L);
free(*L);
*L = NULL;
}
void Dlinklist_Show(Dlinklist* L)
{
Dlinklist* q = L->next;
while (q->next!= L->next)
{
printf(" %d ", q->data);
q = q->next;
}
puts(" ");
return;
}
需要使用那些功能直接在.h文件里面声明后,直接在main.c文件里面引用就可以了。
dlinklist.h文件:
#ifndef _DLINKLIST_H__
#define _DLINKLIST_H__
#include <stdio.h>
#include <stdlib.h>
typedef int data_t;
typedef struct dlinklist
{
data_t data;
struct dlinklist* pointer;
struct dlinklist* next;
}Dlinklist;
Dlinklist* Dlinklist_Creat();//初始化
void Dlinklist_Insert_Head(Dlinklist* L,int n);//输入元素与个数
void Dlinklist_Delete_pos(Dlinklist* L, int pos);//按位置删除
int Dlinklist_Delete_Data(Dlinklist* L, int data, data_t *arr);//按元素删除
void Dlinklist_Add(Dlinklist* L, int pos, data_t data);//按位置添加数据
data_t Dlinklist_Find_Pos(Dlinklist* L, int pos);//按位置查找元素
int Dlinklist_find_Data(Dlinklist* L,data_t data, int arr1[]);//按元素查找,arr1数组存放元素位置
void Dlinklist_Clear(Dlinklist* L);//清空
void Dlinklist_Destory(Dlinklist** L);//销毁
void Dlinklist_Show(Dlinklist* L);
#endif
可能还有其他的功能,但是常用的应该就这些,等以后用到其他的功能再来补充。ok.