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


  
  
单链表的各种操作(增删查改)
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值