链表的基本操作[C语言]
2017-10-15 15:20
573 查看
C语言链表
要求:
typedef int DataType;define NULL 0
typedef struct Node
{
DataType _data;
struct Node* _pNext;
}*PNode;
void InitList(PNode* pHead);
PNode BuyNode(DataType data);
// 打印链表
void PrintList(PNode pHead);
// 1、参数检测
// 2、边界条件
// 3、逻辑操作
// 尾插
void PushBack(PNode* pHead, DataType data);
// 尾删
void PopBack(PNode* pHead);
// 头插
void PushFront(PNode* pHead, DataType data);
// 头删
void PopFront(PNode* pHead);
// 返回结点在链表中的位置
PNode Find(PNode pHead, DataType data);
// 任意位置插入值为data的结点
PNode Insert(PNode pos, DataType data);
// 删除pos位置上的结点
void Erase(PNode* pHead, PNode pos);
// 求链表中节点的个数
size_t Size(PNode pHead);
// 销毁单链表
void DestroyList(PNode* pHead);
源代码:
#ifndef __ADD___H_ #define __ADD___H_ #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <malloc.h> #include<assert.h> typedef int DataType; typedef struct Node { DataType data; struct Node* next; }Node,*PNode; void InitList(PNode* PHead);//初始化链表 PNode ByeNode(DataType data);//申请一个结点 void PrintList(PNode *PHead);//打印单链表 void PushBack(PNode* PHead, DataType data);//尾插 void PopBack(PNode* PHead);//尾删 void PushFront(PNode *PHead, DataType data);//头插 void PopFront(PNode *PHead);//头删 PNode Find(PNode* PHead, DataType data);//查找 void Insert(PNode pos, DataType data);//在data后插入结点 void Erase(PNode pHead, PNode pos);// 删除pos位置上的结点 int Size(PNode PHead);//求链表中结点的个数 void Destroy(PNode* PHead);//销毁 #endif
源文件
#include"标头.h" void InitList(PNode* PHead)//初始化 { assert(PHead); PHead = NULL; } PNode ByeNode(DataType data)//申请一个结点 { PNode newNode = NULL; newNode = (PNode)malloc(sizeof(Node)); if (NULL == newNode) { printf("out of memory.\n"); exit(1); } else { newNode->data = data; newNode->next = NULL; } return newNode; } void PopBack(PNode *PHead)//尾删 { assert(PHead); if (NULL == *PHead) { return; } else if (NULL == (*PHead)->next) { PNode TempNode = *PHead; free(TempNode); TempNode = NULL; *PHead = NULL; } else { PNode PCur = *PHead; while (PCur->next->next) { PCur = PCur->next; } PCur->next = NULL; } } void PushBack(PNode* PHead, DataType data)//尾插 { assert(PHead); if (NULL == *PHead) { *PHead = ByeNode(data); } else { PNode PCur = NULL; PCur = *PHead; while (PCur->next) { PCur = PCur->next; } PCur->next = ByeNode(data); } } void PushFront(PNode *PHead, DataType data)//头插 { assert(PHead); PNode PreNode = NULL; PNode Node = ByeNode(data); PreNode = *PHead; Node->next = PreNode; *PHead = Node; } void PopFront(PNode *PHead)//头删 { assert(PHead); PNode PreNode = *PHead; if (NULL == *PHead) { return; } else if (NULL == (*PHead)->next) { *PHead = NULL; } else { *PHead = PreNode->next; free(PreNode); PreNode = NULL; } } PNode Find(PNode* PHead, DataType data)//查找 { assert(PHead); PNode PCur = *PHead; while (PCur) { if (data == PCur->data) break; PCur = PCur->next; } return PCur; } void Destroy(PNode* PHead)//销毁 { assert(PHead); PNode PCur = *PHead; while (PCur->next) { PNode Dnode = PCur; PCur = PCur->next; free(Dnode); Dnode = NULL; } } int Empty(PNode PHead)//判空 { if (NULL == PHead) return 0; else return 1; } int Size(PNode PHead)//求链表中结点的个数 { PNode Node = PHead; DataType num = 0; while (Node) { num++; Node = Node->next; } return num; } void PrintList(PNode* PHead)//打印单链表 { PNode PCur = *PHead; assert(PHead); while (PCur) { printf("%d->", PCur->data); PCur = PCur->next; } printf("NULL\n"); } void Insert(PNode pos, DataType data)//在data后插入结点 { PNode newNode = ByeNode(data); PNode PreNode = pos; newNode->next = PreNode->next; PreNode->next = newNode; }
测试部分
#include"标头.h" int main() { PNode mylist; /*InitList(&mylist); PushFront(&mylist, 1); PushFront(&mylist, 2); PushFront(&mylist, 3);*/ PushBack(&mylist, 4); /*PrintList(&mylist);*/ system("pause"); return 0; }
相关文章推荐
- C语言实现单链表的基本操作
- 单链表基本操作的C语言实现(链式存储结构)
- 数据结构---C语言单链表基本操作
- c语言链表基本操作
- C语言--链表基本操作(课时5)
- 数据结构--单链表的基本操作(C语言实现)
- C语言实现单链表(带头结点)的基本操作
- C语言单链表的基本操作
- c语言链表的基本操作2
- 单向链表基本操作(C语言实现)
- C语言实现无头链表的基本操作
- 单链表的基本操作(C语言实现)
- C语言链表基本操作
- C语言实现链表的基本操作
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- 最基本的单向链表操作 C语言
- c语言实现循环链表的基本操作
- C语言(数据结构) - 链表的基本操作
- 双向链表的C语言实现与基本操作(二)
- 数据结构 - 单链表的基本操作 (C语言)