单链表的各种操作(增删查改)
2017-09-17 23:14
337 查看
[align=center]单链表的各种操作(增删查改)[/align]
main函数自己写/
#include <stdlib.h>
#include <assert.h>typedef int DataType;typedef struct Node
{
DataType _Data;
struct Node* next;}Node;//创建一个节点
Node* BuyNode(DataType x)
{
Node* node = (Node*)malloc(sizeof(Node));
node->_Data = x;
node->next = NULL;
return node;
}void PushBack(Node** ppHead, DataType x)
{
if (*ppHead == NULL)
{
*ppHead = BuyNode(x);//如果节点为空 则直接插入
}
else
{
//创建新的节点指向要插入位置的前一个节点
Node* tail = *ppHead; while (tail->next)
{
tail = tail->next;//tail指向后一个节点,直到最后一个节点
}
tail->next = BuyNode(x); }
}void PopBack(Node** ppHead)
{
//空
if (*ppHead==NULL)
{
return;
//printf("this Node is kong");
}
//一个
else if ((*ppHead)->next==NULL)
{
free(*ppHead);
*ppHead = NULL;
}
//一个以上
else
{
Node* cur = *ppHead;
Node* prev = NULL;
while (cur->next)
{
prev = cur;
cur = cur->next;
}
free(cur);
prev->next = NULL;
}
}void PushFront(Node** ppHead, DataType x)
{
if (*ppHead == NULL)
{
*ppHead = BuyNode(x);
}
else
{
Node* tmp = BuyNode(x);
tmp->next = *ppHead;
*ppHead = tmp;
}
}void PopFront(Node** ppHead)
{
if (*ppHead == NULL)
{
return;
}
else if ((*ppHead)->next)
{
free(*ppHead);
*ppHead = NULL;
}
else
{
Node* next = (*ppHead)->next;
free(*ppHead);
*ppHead = next;
}
}Node* Find(Node* pList, DataType x)
{
assert(pList);
Node* prev = pList;
while (prev != NULL)
{
if ((prev->_Data) == x)
{
printf("找到了");
return prev;
}
else
{
prev = prev->next;
}
}
return NULL;
}
//指定位置插入
void Insert(Node** ppHead, Node* pos,DataType x)
{
if (*ppHead == NULL)
{
*ppHead = BuyNode(x);
}
assert(pos); if ((*ppHead)=pos)
{
PushFront(ppHead, x);
}
else
{
Node* tmp = BuyNode(x);
Node* prev = *ppHead;
//Node* cur = prev->next;
while (prev->next != pos)
{
prev = prev->next;
}
prev->next=tmp;
tmp->next=pos;
}
}//删除指定位置的节点void Earse(Node**ppHead,Node*pos)
{ assert(*ppHead);
if (*ppHead == pos)
{
free(pos);
}
else
{
Node* prev = *ppHead;
while ((*ppHead)->next != pos)
{
prev = prev->next;
}
prev->next = pos->next;
free(pos);
}
}//打印链表void PrintList(Node* pHead)
{
Node* cur = pHead;
//
while (cur)
{
printf("%d ", cur->_Data);
cur = cur->next;
}
printf("\n");
}void Test()
{
Node* List = NULL;
DataType x = 2; PushBack(&List, 1);
PushBack(&List, 2);
PushBack(&List, 3);
PushBack(&List, 4);
PushBack(&List, 5); //PushFront(&List, 4);
//PushFront(&List, 3);
//PushFront(&List, 2);
//PushFront(&List, 1); Find(List,x);
//Insert(&List, List->next, 30);
PrintList(List);}
#include <stdlib.h> #include <assert.h> typedef int DataType; typedef struct Node { DataType _Data; struct Node* next; }Node; //创建一个节点 Node* BuyNode(DataType x) { Node* node = (Node*)malloc(sizeof(Node)); node->_Data = x; node->next = NULL; return node; } void PushBack(Node** ppHead, DataType x) { if (*ppHead == NULL) { *ppHead = BuyNode(x);//如果节点为空 则直接插入 } else { //创建新的节点指向要插入位置的前一个节点 Node* tail = *ppHead; while (tail->next) { tail = tail->next;//tail指向后一个节点,直到最后一个节点 } tail->next = BuyNode(x); } } void PopBack(Node** ppHead) { //空 if (*ppHead==NULL) { return; //printf("this Node is kong"); } //一个 else if ((*ppHead)->next==NULL) { free(*ppHead); *ppHead = NULL; } //一个以上 else { Node* cur = *ppHead; Node* prev = NULL; while (cur->next) { prev = cur; cur = cur->next; } free(cur); prev->next = NULL; } } void PushFront(Node** ppHead, DataType x) { if (*ppHead == NULL) { *ppHead = BuyNode(x); } else { Node* tmp = BuyNode(x); tmp->next = *ppHead; *ppHead = tmp; } } void PopFront(Node** ppHead) { if (*ppHead == NULL) { return; } else if ((*ppHead)->next) { free(*ppHead); *ppHead = NULL; } else { Node* next = (*ppHead)->next; free(*ppHead); *ppHead = next; } } Node* Find(Node* pList, DataType x) { assert(pList); Node* prev = pList; while (prev != NULL) { if ((prev->_Data) == x) { printf("找到了"); return prev; } else { prev = prev->next; } } return NULL; } //指定位置插入 void Insert(Node** ppHead, Node* pos,DataType x) { if (*ppHead == NULL) { *ppHead = BuyNode(x); } assert(pos); if ((*ppHead)=pos) { PushFront(ppHead, x); } else { Node* tmp = BuyNode(x); Node* prev = *ppHead; //Node* cur = prev->next; while (prev->next != pos) { prev = prev->next; } prev->next=tmp; tmp->next=pos; } } //删除指定位置的节点 void Earse(Node**ppHead,Node*pos) { assert(*ppHead); if (*ppHead == pos) { free(pos); } else { Node* prev = *ppHead; while ((*ppHead)->next != pos) { prev = prev->next; } prev->next = pos->next; free(pos); } } //打印链表 void PrintList(Node* pHead) { Node* cur = pHead; // while (cur) { printf("%d ", cur->_Data); cur = cur->next; } printf("\n"); } void Test() { Node* List = NULL; DataType x = 2; PushBack(&List, 1); PushBack(&List, 2); PushBack(&List, 3); PushBack(&List, 4); PushBack(&List, 5); //PushFront(&List, 4); //PushFront(&List, 3); //PushFront(&List, 2); //PushFront(&List, 1); Find(List,x); /st, List->nex
相关文章推荐
- Java实现单链表的各种操作
- 单链表的各种操作(建立,查找,删除,插入,归并等)
- 二叉树的定义,节点的增删改查以及父节点、子节点的各种操作。
- 单链表的各种操作 笔试 面试
- 用C语言实现单链表的各种操作
- 如何实现单链表的增删操作
- 使用结构体实现连续存储数组增删改查等各种操作
- [置顶] 不带头结点的 单链表的各种操作实现c语言
- 单链表的创建删除排序插入逆向打印各种操作
- 单链表的各种操作
- C语言实现单链表的各种操作
- 单链表操作(增删改查)(version 0.1)
- dao层各种增删改查封装成对象方法 以student表 操作
- 单链表的各种操作 笔试 面试
- sqlalchemy增删各种操作
- 如何实现单链表的增删操作
- 单链表的各种操作——创建及遍历
- c语言单链表的各种操作<未完>
- 单链表的各种操作
- 链表-单链表的各种操作