C语言实现单链表
来源:互联网 发布:淘宝客微博推广教程 编辑:程序博客网 时间:2024/06/06 05:57
List.h
#ifndef _LIST_H_#define _LIST_H_#include <stdio.h>#include <Windows.h>#include <assert.h>#include <malloc.h>typedef int DataType;typedef struct ListNode{ DataType _data; struct ListNode* _next;}ListNode;void PrintList(ListNode* pList);ListNode* BuyNode(DataType x);void PushBack(ListNode** ppList, DataType x);void PopBack(ListNode** ppList);void PushFront(ListNode** ppList, DataType x);void PopFront(ListNode** ppList);ListNode* Find(ListNode* pList, DataType x); void Insert(ListNode** ppList, ListNode* pos, DataType x);void Erase(ListNode** ppList, ListNode* pos);#endif
List.c
#include "List.h"void PrintList(ListNode* pList){ if (pList == NULL) { printf("NULL\n"); } ListNode* cur = pList; while (cur) { printf("%d ", cur->_data); cur = cur->_next; } printf("\n");}ListNode* BuyNode(DataType x){ ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); newNode->_data = x; newNode->_next = NULL; return newNode;}void PushBack(ListNode** ppList, DataType x){ //1.空 2.非空 assert(ppList); if (*ppList == NULL) { *ppList = BuyNode(x); } else { ListNode* tail = *ppList; while (tail->_next) { tail = tail->_next; } tail->_next = BuyNode(x); }}void PopBack(ListNode** ppList){ //1.空 2.一个 3.多个 assert(ppList); if (*ppList == NULL) { return; } else if ((*ppList)->_next==NULL) { free(*ppList); *ppList = NULL; } else { ListNode* prev = NULL; ListNode* tail = *ppList; while (tail->_next) { prev = tail; tail = tail->_next; } free(tail); prev->_next = NULL; }}void PushFront(ListNode** ppList, DataType x){ //1.空 2.非空 assert(ppList); if (*ppList == NULL) { (*ppList) = BuyNode(x); return; } else { ListNode* head = BuyNode(x); head->_next = *ppList; *ppList = head; }}void PopFront(ListNode** ppList){ //1.空 2.一个 3.多个 assert(ppList); if (*ppList == NULL) { return; } else if ((*ppList)->_next == NULL) { free(*ppList); *ppList = NULL; } else { ListNode* cur = (*ppList)->_next; free(*ppList); *ppList = cur; }}ListNode* Find(ListNode* pList, DataType x){ while (pList) { if (pList->_data == x) { return pList; } pList = pList->_next; } return NULL;}void Insert(ListNode** ppList, ListNode* pos, DataType x){ //1.头插 2.中间位置插入 assert(pos); assert(ppList); if (pos==*ppList) { PushFront(ppList, x); return; } else { ListNode* cur = BuyNode(x); ListNode* prev = *ppList; while (prev->_next!=pos) { prev = prev->_next; } cur->_next = prev->_next; prev->_next = cur; }}void Erase(ListNode** ppList, ListNode* pos){ //1.头删 2.其余位置删除 assert(ppList); assert(pos); if (pos == *ppList) { PopFront(ppList); return; } else { ListNode* prev = *ppList; while (prev->_next != pos) { prev = prev->_next; } prev->_next = pos->_next; free(pos); pos = NULL; }}
测试用例test.c
#include "List.h"void TestList1(){ ListNode* list = NULL; PushBack(&list, 1); PushBack(&list, 2); PushBack(&list, 3); PushBack(&list, 4); PrintList(list);}void TestList2(){ ListNode* list = NULL; PushBack(&list, 1); PushBack(&list, 2); PushBack(&list, 3); PushBack(&list, 4); PopBack(&list); PopBack(&list); PopBack(&list); //PopBack(&list); //PopBack(&list); PrintList(list);}void TestList3(){ ListNode* list = NULL; PushFront(&list, 1); PushFront(&list, 2); PushFront(&list, 3); PushFront(&list, 4); PrintList(list);}void TestList4(){ ListNode* list = NULL; PushFront(&list, 1); PushFront(&list, 2); PushFront(&list, 3); PushFront(&list, 4); PopFront(&list); PopFront(&list); PopFront(&list); //PopFront(&list); //PopFront(&list); PrintList(list);}void TestList5(){ ListNode* list = NULL; PushBack(&list, 1); PushBack(&list, 2); PushBack(&list, 4); ListNode* ret = Find(list,1); Insert(&list, ret, 0); ret = Find(list, 4); Insert(&list, ret, 3); PrintList(list);}void TestList6(){ ListNode* list = NULL; PushBack(&list, 1); PushBack(&list, 2); PushBack(&list, 3); PushBack(&list, 4); ListNode* ret = Find(list,1); Erase(&list, ret); PrintList(list); ret = Find(list, 4); Erase(&list, ret); PrintList(list); ret = Find(list, 2); Erase(&list, ret); PrintList(list); ret = Find(list, 3); Erase(&list, ret); PrintList(list);}int main(){ TestList6(); system("pause"); return 0;}
阅读全文
0 0
- C语言实现单链表
- C语言实现单链表
- C语言单链表实现
- C语言实现单链表
- 单链表C语言实现
- c语言单链表实现
- 单链表 C语言实现
- C语言实现单链表
- c语言实现单链表
- C语言实现单链表
- C语言实现单链表
- C语言单链表实现
- C语言实现单链表
- C语言实现单链表
- c语言实现单链表
- C语言实现单链表
- c语言实现单链表
- 单链表C语言实现
- 栈的构建
- 剑指Offer第36题—Java版
- java.util.HashMap源码解析
- C#——面向对象——重载操作符——自定义转换
- 新一代学生成绩管理系统(C语言版)
- C语言实现单链表
- 如何根据丝印查找相关的产品型号
- 解决:在anaconda下无法使用conda安装第三方库问题
- 内部类
- 虚拟机vmx文件--Centos
- feign-使用最佳实践
- call()和apply()的区别?
- 我的第一篇博客
- codeforces 489C Given Length and Sum of Digits...