LinkList.h
#ifndef __LINKLIST__H__
#define __LINKLIST__H__
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode
{
int data;
struct LinkNode* next;
}LinkNode;
typedef struct LinkList
{
LinkNode* head;
}LinkList;
// // 遍历链表
void LinkListPrint(LinkList* list);
// 初始化链表
LinkList* LinkListInit(void);
// 创建结点
LinkNode* CreateNode(int data);
// 头插结点
void LinkListPushFront(LinkList* list, int data);
// 尾插结点
void LinkListPushBack(LinkList* list, int data);
// 任意位置插结点
void LinkListPushPos(LinkList* list, int pos, int data);
// 头删结点
void LinkListPopFront(LinkList* list);
// 尾删结点
void LinkListPopBack(LinkList* list);
// 任意位置删结点
void LinkListPopPos(LinkList* list, int pos);
// 按照值删除
void LinkListPopVal(LinkList* list, int val);
// 按照值修改
void LinkListModifyVal(LinkList* list, int oldVal, int newVal);
// 按照位置修改
void LinkListModifyPos(LinkList* list, int pos, int newVal);
// 按照位置查找
void LinkListSeekPos(LinkList* list, int pos);
// 按值查找
void LinkListSeekVal(LinkList* list, int val);
// 清空链表
void LinkListClear(LinkList* list);
//链表销毁
void LinkListDesdroy(LinkList** list);
#endif
LinkList.c
#include "LinkList.h"
// 遍历链表
void LinkListPrint(LinkList* list)
{
LinkNode* cur = list->head;
while(cur != NULL)
{
printf("%d->", cur->data);
cur = cur->next;
}
putchar('\n');
}
// 初始化链表
LinkList* LinkListInit()
{
LinkList* list = (LinkList*)malloc(sizeof(LinkList));
if(NULL == list)
{
printf("malloc fail!\n");
exit(-1);
}
list->head = NULL;
return list;
}
// 创建结点
LinkNode* CreateNode(int data)
{
LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 头插结点
void LinkListPushFront(LinkList* list, int data)
{
LinkNode* newNode = CreateNode(data);
newNode->next = list->head;
list->head = newNode;
}
// 尾插结点
void LinkListPushBack(LinkList* list, int data)
{
LinkNode* newNode = CreateNode(data);
LinkNode* cur = list->head;
// LinkNode* temp = NULL;
while(cur->next != NULL)
{
// temp = cur;
cur = cur->next;
}
cur->next = newNode;
}
// 任意位置插结点
void LinkListPushPos(LinkList* list, int pos, int data)
{
if(pos < 0 || list->head == NULL)
{
printf("无效位置插入!\n");
return;
}
if(0 == pos)
{
LinkListPushFront(list, data);
return;
}
LinkNode* newNode = CreateNode(data);
LinkNode* cur = list->head;
while(--pos)
{
cur = cur->next;
}
newNode->next = cur->next;
cur->next = newNode;
}
// 头删结点
void LinkListPopFront(LinkList* list)
{
if(list->head == NULL)
{
printf("空链表!\n");
return;
}
LinkNode* cur = list->head;
list->head = list->head->next;
free(cur);
}
// 尾删结点
void LinkListPopBack(LinkList* list)
{
if(list->head == NULL)
{
printf("空链表!\n");
return;
}
LinkNode* cur = list->head;
LinkNode* temp = NULL;
while(cur->next != NULL)
{
temp = cur;
cur = cur->next;
}
temp->next = NULL;
free(cur);
}
// 任意位置删结点
void LinkListPopPos(LinkList* list, int pos)
{
if(pos < 0 || list->head == NULL)
{
printf("无效位置删除结点!\n");
return;
}
if(0 == pos)
{
LinkListPopFront(list);
return;
}
LinkNode* cur = list->head;
LinkNode* temp = NULL;
while(--pos)
{
cur = cur->next;
}
temp = cur->next;
cur->next = cur->next->next;
free(temp);
}
// 按照值删除
void LinkListPopVal(LinkList* list, int val)
{
if(NULL == list->head)
{
printf("空链表!\n");
return;
}
if(list->head->data == val)
{
LinkListPopFront(list);
return;
}
LinkNode* cur = list->head;
LinkNode* temp = NULL;
while(cur->data != val)
{
temp = cur;
cur = cur->next;
}
temp->next = cur->next;
free(cur);
}
//按照值修改
void LinkListModifyVal(LinkList* list, int oldVal, int newVal)
{
if(NULL == list->head)
{
printf("空链表!\n");
return;
}
LinkNode* cur = list->head;
while(cur)
{
if(cur->data == oldVal)
{
cur->data = newVal;
return;
}
cur = cur->next;
}
printf("链表中没有值为%d的结点\n", oldVal);
}
// 按照位置修改
void LinkListModifyPos(LinkList* list, int pos, int newVal)
{
if(pos < 0 || list->head == NULL)
{
printf("无效位置修改!\n");
return;
}
LinkNode* cur = list->head;
while(pos--)
{
cur = cur->next;
}
cur->data = newVal;
}
//按照位置查找
void LinkListSeekPos(LinkList* list, int pos)
{
int temp = pos;
if(pos < 0 || list->head == NULL)
{
printf("无效位置查找!\n");
return;
}
LinkNode* cur = list->head;
while(temp--)
{
cur = cur->next;
}
printf("%d位置的值是%d\n", pos, cur->data);
}
//按值查找
void LinkListSeekVal(LinkList* list, int val)
{
LinkNode* cur = list->head;
int pos = 0;
while(cur)
{
if(cur->data == val)
{
printf("找到了值为%d的位置%d\n", cur->data, pos);
return;
}
cur = cur->next;
++pos;
}
printf("没有值为%d的结点\n", val);
}
// 清空链表
void LinkListClear(LinkList* list)
{
if(NULL == list)
return;
LinkNode* cur = list->head;
LinkNode* temp = NULL;
while(cur)
{
temp = cur;
cur = cur->next;
free(temp);
}
list->head = NULL;
printf("清空链表完成!\n");
}
//链表销毁
void LinkListDesdroy(LinkList** list)
{
LinkListClear(*list);
free(*list);
*list = NULL;
printf("链表销毁完成!\n");
}
main.c
#include "LinkList.h"
void LinkListTest(void)
{
// 初始化链表
LinkList* list = LinkListInit();
// 头插结点
printf("头插结点\n");
LinkListPushFront(list, 100);
LinkListPushFront(list, 200);
LinkListPushFront(list, 300);
LinkListPrint(list);
// 尾插结点
printf("尾插结点\n");
LinkListPushBack(list, 400);
LinkListPushBack(list, 500);
LinkListPushBack(list, 600);
LinkListPrint(list);
// 任意位置插结点
printf("任意位置插结点\n");
LinkListPushPos(list, 0, 700);
LinkListPrint(list);
LinkListPushPos(list, 3, 800);
LinkListPrint(list);
LinkListPushPos(list, 8, 900);
LinkListPrint(list);
// 头删结点
printf("头删结点\n");
LinkListPopFront(list);
LinkListPrint(list);
// 尾删结点
printf("尾删结点\n");
LinkListPopBack(list);
LinkListPrint(list);
// 任意位置删结点
printf("任意位置删结点\n");
LinkListPopPos(list, 2);
LinkListPrint(list);
// 按照值删除
printf("按照值删除\n");
LinkListPopVal(list, 200);
LinkListPrint(list);
//按照值修改
printf("按照值修改\n");
LinkListModifyVal(list, 300, 800);
LinkListPrint(list);
// 按照位置修改
printf("按照位置修改\n");
LinkListModifyPos(list, 2, 222);
LinkListPrint(list);
// 按照位置查找
printf("按照位置查找\n");
LinkListSeekPos(list, 0);
// 按值查找
printf("按值查找\n");
LinkListSeekVal(list, 222);
// 清空链表
LinkListClear(list);
//链表销毁
LinkListDesdroy(&list);
}
int main(void)
{
LinkListTest();
return 0;
}
标签:LinkList,线性表,int,void,list,链表,操作,LinkNode,cur
From: https://www.cnblogs.com/bcc0729/p/17621095.html