单链表的各种操作
#include<iostream>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
typedef int DATA;struct SNode //定義節點
{DATA data;SNode* pNext;
};
class CList //創建一個鏈表類
{SNode* m_hHead; //鏈表初始化char m_name[20];public:CList() //構造函數初始化鏈表{m_hHead = NULL;}void Setname(const char* p){strcpy(m_name, p);}void AddHead(DATA data) //頭部插入{SNode* p = new SNode; //創建新的節點p->data = data; //數據域p->pNext = m_hHead; //指針域m_hHead = p; //鏈表初始頭}void AddTail(DATA data) //尾插入{SNode* pNew = new SNode; //創建新的節點pNew->data = data; //數據域pNew->pNext = NULL; //指針域if (!m_hHead) //沒有頭節點情況下{m_hHead = pNew; //將新創建節點設置為頭節點return;}SNode* p = m_hHead; //防止異常while (p->pNext != NULL) //遍歷到最后一個節點p = p->pNext; p->pNext = pNew; }int Delete(DATA data) //刪除節點{SNode* p = m_hHead, *p1 = NULL;//*p1用來記錄前一個節點地址if (!p)return 0;if (p->data == data) //當要刪除節點為頭節點的情況{m_hHead = p->pNext;free(p);return 1;}while (p){if (p->data == data){p1->pNext = p->pNext;free(p);return 1;}p1 = p;p = p->pNext;}}void Print() //打印節點{cout << m_name << endl;SNode* p = m_hHead;while (p){cout << p->data << endl;p = p->pNext;}}void Modify(DATA data, DATA newData)//修改某處節點{SNode* p = m_hHead;while (p){if (p->data == data)p->data = newData;p = p->pNext;}}int Find(DATA data) //查找節點{SNode*p = m_hHead;int i = 0; //用于返回當前節點查找到的位置while (p){if (p->data == data)return i + 1;//代表成功,返回的位置p = p->pNext;++i;}return -1;//代表失敗}int GETLIST() //返回節點總數量{SNode* p = m_hHead;int i = 0;while (p){i++;}return i;}
};int main()
{CList A,B;A.Setname("LIST1: ");A.AddHead(10);A.AddHead(9);A.AddHead(8);A.AddHead(7);A.AddHead(6);A.AddHead(5);B.Setname("LIST2: ");B.AddHead(4);B.AddHead(3);B.AddHead(2);B.AddHead(1);B.AddHead(0);A.Print();B.Print();system("pause");return 0;
}
?
總結
- 上一篇: 用手机设置水星(mercury)路由器步
- 下一篇: 建立能持续处理请求的Server端改造