您的位置:首页 > 其它

单链表的各种操作(增删查改)

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: