📄 mylist.cpp
字号:
#include "stdafx.h"
#include <stdio.h>
#include "mylist.h"
student* CreateNode()
{
student* pTemp = new student;
pTemp->pNext = NULL;
printf("请输入姓名,学号,分数:");
scanf("%s%d%d", pTemp->szName,
&pTemp->nNumber,
&pTemp->nScore);
return pTemp;
}
void AddToTail(student* &pHead,
student* &pTail,
student* pTemp)
{
if(pHead == NULL)
{
pHead = pTemp;
pTail = pTemp;
}
else
{
pTail->pNext = pTemp;
pTail = pTemp;
}
}
// 插入新节点到链表中的适当位置
// 此函数我们按学号顺序插入
void InsertNode(student* &pHead,
student* &pTail,
student* pTemp)
{
// 0.空链表
if (pTail == NULL && pHead == NULL)
{
pHead = pTemp;
pTail = pTemp;
return ;
}
// 1.比头节点还小
else if (pTemp->nNumber <= pHead->nNumber)
{
pTemp->pNext = pHead;
pHead = pTemp;
return ;
}
// 2.比尾节点还大
else if (pTemp->nNumber >= pTail->nNumber)
{
pTail->pNext = pTemp;
pTail = pTemp;
return ;
}
// 3. 普通情况
student* pCurrent = pHead;
while (pCurrent != NULL)
{
if (pCurrent->nNumber <= pTemp->nNumber &&
pCurrent->pNext->nNumber >= pTemp->nNumber)
{
// 让新节点指向后一个节点
pTemp->pNext = pCurrent->pNext;
// 让当前节点指向新节点自己
pCurrent->pNext = pTemp;
break;
}
pCurrent = pCurrent->pNext;
}
}
// 删除由nNumber指定学号的节点
void DeleteNode(student* &pHead,
student* &pTail,
int nNumber)
{
// 0.空链表
if (pHead == NULL && pTail == NULL)
{
return ;
}
// 1.删除链表的头节点
else if (pHead->nNumber == nNumber)
{
if (pHead == pTail) // 只有一个节点
{
delete pHead;
pHead = NULL;
pTail = NULL;
}
else // 有大于一个的节点
{
student* pBackup = pHead->pNext;
delete pHead;
pHead = pBackup;
}
return ;
}
// 2.普通情况
student* pTemp = pHead;
student* pPrev = pHead;
while (pTemp != NULL)
{
if (pTemp->nNumber == nNumber)
{
// 找到了节点,删除它!
if (pTemp == pTail) // 尾节点
{
pPrev->pNext = pTemp->pNext;
delete pTemp;
pTail = pPrev;
}
else // 非尾节点
{
pPrev->pNext = pTemp->pNext;
delete pTemp;
}
break;
}
pPrev = pTemp;
pTemp = pTemp->pNext;
}
}
void PrintList(student* pHead)
{
student* pTemp = pHead;
while (pTemp != NULL)
{
printf("姓名,学号,分数:%s,%d,%d\n",
pTemp->szName,
pTemp->nNumber,
pTemp->nScore);
pTemp = pTemp->pNext;
}
}
// 释放整个链表
void FreeList(student* &pHead, student* &pTail)
{
student* pTemp = pHead;
while (pTemp != NULL)
{
student* pBackup = pTemp->pNext;
delete pTemp;
pTemp = pBackup;
}
pHead = NULL;
pTail = NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -