链表操作


//链表定义
struct Node_New
{
 int num;
 Node_New* next;
};

//创建链表
Node_New* Create()
{
 Node_New *head, *newNode, *endNode;

 int nNodeCount = 0;
 head = NULL; //还没有任何节点,表头为空

 newNode = new Node_New; //创建一个新节点
 endNode = newNode;      //表尾指向新节点

 cin >> newNode->num;

 while (newNode->num != 0)
 {
  nNodeCount += 1;

  if (nNodeCount == 1)
  {
   head = newNode;  //表头指向第一个新节点
  }
  else
  {
   endNode->next = newNode;
  }

  endNode = newNode;   //表尾指向新节点

  newNode = new Node_New;
  cin >> newNode->num;
 }

 delete newNode;
 endNode->next = NULL;
 return head;

}

 

//删除链表中的一个节点

Node_New* DeleteOneNode(Node_New* head, int num)
{
 Node_New *SpecialNode, *PreNode;
 if (head == NULL)
 {
  return head;
 }

 SpecialNode = head;
 while (SpecialNode->num != num && SpecialNode->next != NULL)
 {
  PreNode = SpecialNode;
  SpecialNode = SpecialNode->next;
 }

 if (SpecialNode->num == num)
 {
  if (head == SpecialNode)
  {
   head = SpecialNode->next;
  }
  else
  {
   PreNode->next = SpecialNode->next;
  }

  delete SpecialNode;
 }
 else
 {
  cout << "没有发现该节点";
 }
 return head;
}

 

//返回链表长度
int ListLength(Node_New* L)
{
 Node_New* p = L;
 int count = 0;
 while(p->next)
 {
  count++;
  p = p->next;
 }
 return count;
}

 

//返回给定值在链表中的索引
int Search(Node_New* L, int value)
{
 Node_New* pNode = L;
 int index = 0;
 while(pNode)
 {
  if (pNode->num == value)
  {
   return index;
  }
  pNode = pNode->next;
  index++;
 }
 return 0;
}

 

//打印链表
void Print(Node_New* head)
{
 Node_New* pNode = head;
 while(pNode)
 {
  cout << pNode->num<<endl;
  pNode = pNode->next;
 }
}

 

//链表逆序(循环法)
Node_New* ReverseList(Node_New* head)
{
 Node_New *p1, *p2, *p3;
 p1 = head;
 p2 = p1->next;
 
 while (p2 != NULL)
 {
  p3 = p2->next;
  p2->next = p1;

  p1 = p2;
  p2 = p3;
 }
 head->next = NULL;
 head = p1;
 return head;

}

//链表逆序(递归法)
Node_New* ReverseList2(Node_New* head)
{
 if (!head)
 {
  return NULL;
 }

 Node_New* temp = ReverseList2(head->next);

 if (!temp)
 {
  return head;
 }

 head->next->next = head;
 head->next = NULL;

 return temp;
}

//两个链表head1和head2各自有序, 将它们合并成一个链表,依然有序 (循环法)
Node_New* Merge(Node_New* head1, Node_New* head2)
{
 Node_New* head;

 if (head1 == NULL) return head2;

 if (head2 == NULL)  return head1;

 if (head1->num <= head2->num)
 {
  head = head1;
  head1 = head1->next;
 }
 else
 {
  head = head2;
  head2 = head2->next;
 }

 Node_New* temp = head;
 while (head1 != NULL && head2 != NULL)
 {
  if (head1->num <= head2->num)
  {
   temp->next = head1;
   head1 = head1->next;
   temp = temp->next;
  }
  else
  {
   temp->next = head2;
   head2 = head2->next;
   temp = temp->next;
  }
 }

 if (head1 = NULL) temp->next = head2;
 if (head2 = NULL) temp->next = head1;
 return head;
}

//两个链表head1和head2各自有序, 将它们合并成一个链表,依然有序 (递归法)
Node_New* Merge2(Node_New* head1, Node_New* head2)
{
 if (head1 == NULL) return head2;

 if (head2 == NULL)  return head1;

 Node_New* head = NULL;

 if (head1->num <= head2->num)
 {
  head = head1;
  head->next = Merge2(head1->next, head2);
 }
 else
 {
  head = head2;
  head->next = Merge2(head1, head2->next);
 }

 return head;
}

Node_New* InsertNode(Node_New* head, Node_New* p)
{
 Node_New* newNode = p;
 Node_New* p1 = head;
 Node_New* p2;
 if (head == NULL)
 {
  head = p;
  p->next = NULL;
 }
 else
 {
  while (newNode->num > p1->num && p1->next != NULL)
  {
   p2 = p1;
   p1 = p1->next;
  }

  if (newNode->num < p1->num)
  {
   p2->next = newNode;
   newNode->next = p1;
  }
  else
  {
   p1->next = newNode;
   newNode->next = NULL;
  }
 }

 return head;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:– JavaScript 中的患者数据管理系统 患者数据管理系统是为医院开发的 node JS 项目。通过使用此系统,您可以轻松访问患者数据,它具有成本效益,可改善患者护理和数据安全性。不仅如此,它还减少了错误范围。在运行项目之前,您需要下载 node.js。 这个患者数据管理项目包含 javascript、node.js 和 CSS。我们必须让服务器监听端口 3000,并使用 JSON 在客户端和服务器之间交换数据。这个项目会不断询问您有关插件更新的信息,因此请保持互联网畅通。此系统允许您执行 crud 操作。在这里,您是系统的管理员。您还可以添加所需的员工人数。此外,您还可以更新患者记录。该系统功能齐全且功能齐全。 要运行此项目,您需要在计算机上安装NodeJS并使用现代浏览器,例如 Google Chrome、  Mozilla Firefox。ReactJS项目中的此项目可免费下载源代码。有关项目演示,请查看下面的图像滑块。 对于手动安装 1.将主项目文件夹解压到任意目录 2.从 cmd 设置项目目录的路径 3. 输入命令“npm install” 4.完成后输入命令“npm start” 5.现在,您将获得一个 localhost:portnumber,并转到该 URL 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值