C++笔试题(单向链表)
来源:互联网 发布:上瘾网络剧拍摄花絮5 编辑:程序博客网 时间:2024/06/06 00:55
#ifndef F_Test_2017_11_11_11_JHASKDFJHASF_H_#define F_Test_2017_11_11_11_JHASKDFJHASF_H_#include <stdio.h>/*单向链表操作*/template<class T>struct FSingletonNode{ T tValue; FSingletonNode *pFNodeNext;};//清空节点所有数据template<class T>void ClearList(FSingletonNode<T> **pHead){ FSingletonNode<T> *pCurNode = *pHead; while(*pHead) { pCurNode= (*pHead)->pFNodeNext; delete *pHead; *pHead = pCurNode; } pHead = NULL;}//打印数据template<class T>void PrintLite(FSingletonNode<T> *pHead){ const char *tType= typeid(T).name(); FSingletonNode<T> *pCurNode = pHead; while (pCurNode) { if (0 == strcmp(tType, "int")) { TRACE("%d, ", pCurNode->tValue); } else if (0 == strcmp(tType, "float")) { TRACE("%f, ", pCurNode->tValue); } pCurNode = pCurNode->pFNodeNext; } TRACE("\n");}//在节点末尾,添加数据template<class T>BOOL Pushback(FSingletonNode<T> **pHead, const T tValue){ //创建新节点,存数据 FSingletonNode<T> *pCurNode = new FSingletonNode<T>; pCurNode->tValue = tValue; pCurNode->pFNodeNext = NULL; //如果为链表第一个数据,头结点 if (*pHead == NULL) { *pHead = pCurNode; } else { //找到尾节点 FSingletonNode<T> *pEndNode = *pHead; while(pEndNode->pFNodeNext) { pEndNode = pEndNode->pFNodeNext; } //将新创建节点设为尾节点 pEndNode->pFNodeNext = pCurNode; } return TRUE;}//根据数据,删除节点template<class T>BOOL RemoveNode(FSingletonNode<T> **pHead, const T tValue){ if((*pHead == NULL) || (pHead == NULL)) { return TRUE; } FSingletonNode<T> *pDeleteNode = NULL; //如果需要删除的是第一个节点 if((*pHead)->tValue == tValue) { pDeleteNode = *pHead; *pHead = (*pHead)->pFNodeNext; } else { //找到需要删除节点的上一个节点 FSingletonNode<T> *pPreNode = *pHead; while(pPreNode->pFNodeNext && (pPreNode->pFNodeNext->tValue != tValue)) { pPreNode = pPreNode->pFNodeNext; } //将删除节点的上一个节点的pNext,指向删除节点的下一个节点 if(pPreNode->pFNodeNext && (pPreNode->pFNodeNext->tValue == tValue)) { pDeleteNode = pPreNode->pFNodeNext; pPreNode->pFNodeNext = pPreNode->pFNodeNext->pFNodeNext; } } //释放需要删除的节点数据 if (pDeleteNode) { delete pDeleteNode; pDeleteNode = NULL; } return TRUE;}//测试void F_Test_List(){ FSingletonNode<int> *pHead = NULL; Pushback(&pHead, 10); Pushback(&pHead, 8); Pushback(&pHead, 20); Pushback(&pHead, 5); Pushback(&pHead, 26); Pushback(&pHead, 9); Pushback(&pHead, 4); Pushback(&pHead, 2); PrintLite(pHead); RemoveNode(&pHead, 10); RemoveNode(&pHead, 26); RemoveNode(&pHead, 2); RemoveNode(&pHead, 22); PrintLite(pHead); ClearList(&pHead); FSingletonNode<float> *pHeadF = NULL; Pushback(&pHeadF, (float)1.5); Pushback(&pHeadF, (float)8.658); Pushback(&pHeadF, (float)2.265); Pushback(&pHeadF, (float)22.456); PrintLite(pHeadF); ClearList(&pHeadF);}#endif//F_Test_2017_11_11_11_JHASKDFJHASF_H_
阅读全文
0 0
- C++笔试题(单向链表)
- 数据结构--单向链表(c++)
- 数据结构(C语言)-单向链表
- List-c单向链表
- list-c单向链表
- C语言版单向链表
- C语言单向链表
- C 单向链表反转
- C语言 单向链表
- C++:单向链表实现
- C语言单向链表
- c语言-单向链表
- C 通用单向链表
- C++笔试题(剑指offer 面试题5 将单向链表数据,逆向打印输出)
- 链表(单向链表)(C实现)
- 带表头的单向链表实现(C语言)
- 如何编写自己单向链表(c语言)
- 单向链表标准写法(C格式)
- Reinforcement Learning:An introduction读书笔记-Chapter 2
- md5加密C语言实现
- 我的第一篇博客
- 开始android 之路(废话篇)
- Django-restframework26 Versioning(版本控制)
- C++笔试题(单向链表)
- Your MATLAB license will expire in 05 days
- A
- 发稿排行>更多
- Spring security实战(2)-----搭建SpringBoot
- Django-restframework27 Content negotiation(内容协议)
- 跳跃游戏-----原博主的分析很精彩
- 计算乘积之和
- Django-restframework28 Metadata