網(wǎng)上有很多關(guān)于pos機(jī)反回代碼,c代碼實現(xiàn)鏈表的操作函數(shù) 增減刪改的知識,也有很多人為大家解答關(guān)于pos機(jī)反回代碼的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)反回代碼
代碼實現(xiàn)鏈表的操作函數(shù)
1.首先是尾插 ,要實現(xiàn)尾插,首先的先有一個鏈表,并且為空。
即先構(gòu)造一個鏈表,并且進(jìn)行初始化。
[html] view plain copy
//構(gòu)造鏈表 typedef int DataType; typedef struct SListNode { DataType data; struct SListNode *pNext; } SListNode; // 初始化 void SListInit(SListNode **ppFirst) { assert(ppFirst != NULL); *ppFirst = NULL; } 進(jìn)行尾插前,我們的在構(gòu)造一個新鏈表,用來存放尾插后形成的新鏈表。 SListNode * CreateNewNode(int data) { SListNode *pNewNode = (SListNode *)malloc(sizeof(SListNode)); assert(pNewNode); pNewNode->data = data; pNewNode->pNext = NULL; return pNewNode; } 下面進(jìn)行尾插 void PushBack(SListNode **ppFirst, DataType data) { assert(ppFirst != NULL); SListNode *pNewNode = CreateNewNode(data); if (*ppFirst == NULL) { *ppFirst = pNewNode; return; } SListNode *pNode; pNode = *ppFirst; while (pNode->pNext != NULL) { pNode = pNode->pNext; } // pNode 就是倒數(shù)第一個 pNode->pNext = pNewNode; } 再加上打印函數(shù)與測試函數(shù),main函數(shù)。 //print void Print(SListNode *pFirst) { SListNode *pNode; for (pNode = pFirst; pNode; pNode = pNode->pNext) { printf("%d -> ", pNode->data); } printf("NULL\"); } //測試函數(shù) void TestSList() { SListNode *pFirst; SListInit(&pFirst); assert(pFirst == NULL); PushBack(&pFirst, 1); assert(pFirst != NULL); Print(pFirst); PushBack(&pFirst, 2); PushBack(&pFirst, 3); PushBack(&pFirst, 4); Print(pFirst); } //main函數(shù) #include"SList.h" int main(){ TestSList(); system("pause"); } 效果如下2.頭插
[html] view plain copy
void PushFront(SListNode **ppFirst, DataType data) {assert(ppFirst != NULL); SListNode *pNewNode = CreateNewNode(data); pNewNode->pNext = *ppFirst; *ppFirst = pNewNode; } 測試函數(shù)如下: PushFront(&pFirst, 5); PushFront(&pFirst, 8); Print(pFirst);3.按下標(biāo)插入(令給定下標(biāo)是pos,pos一定存在)
[html] view plain copy
void Insert(SListNode **ppFirst, SListNode *pPos, DataType data) { assert(ppFirst != NULL); SListNode *pNode; pNode = *ppFirst; // pPos 是第一個結(jié)點地址 if (pPos == *ppFirst) { PushFront(ppFirst, data); return; } while (pNode->pNext != pPos){ pNode = pNode->pNext; } SListNode *pNewNode = CreateNewNode(data); pNode->pNext = pNewNode; pNewNode->pNext = pPos; } 進(jìn)行按給定位置插入 需確定pos位置,需定義find函數(shù) //find SListNode * Find(SListNode *pFirst, DataType data) { SListNode *pNode; for (pNode = pFirst; pNode; pNode = pNode->pNext) { if (pNode->data == data) { return pNode; } } return NULL; } 測試代碼如下: SListNode *pFound = Find(pFirst, 3); if (pFound == NULL) { printf("沒有找到\"); } else { printf("%d\", pFound->data); Insert(&pFirst, pFound, 100); } Print(pFirst); 效果如下:二、刪除
1.頭刪
[html] view plain copy
void PopFront(SListNode **ppFirst) { assert(ppFirst != NULL); assert(*ppFirst != NULL); SListNode *pOldFirst = *ppFirst; *ppFirst = (*ppFirst)->pNext; free(pOldFirst); } 測試代碼如下: PopFront(&pFirst); Print(pFirst); 效果如下:2.尾刪
[html] view plain copy
void PopBack(SListNode **ppFirst) { assert(ppFirst != NULL); assert(*ppFirst != NULL); if ((*ppFirst)->pNext == NULL) { free(*ppFirst); *ppFirst = NULL; return; } SListNode *pNode = *ppFirst; while (pNode->pNext->pNext != NULL) { pNode = pNode->pNext; } free(pNode->pNext); pNode->pNext = NULL; } 測試函數(shù)如下: PopBack(&pFirst); Print(pFirst); 效果如下:3.按位置刪除(根據(jù)結(jié)點地址刪除,結(jié)點肯定在鏈表里,令節(jié)點位置為pPos)
[html] view plain copy
void Erase(SListNode **ppFirst, SListNode *pPos) { assert(ppFirst != NULL); assert(*ppFirst != NULL); if (*ppFirst == pPos) { PopFront(ppFirst); return; } SListNode *pCur; for (pCur = *ppFirst; pCur->pNext != pPos; pCur = pCur->pNext) { } // pCur 就是 pPos的前一個 pCur->pNext = pPos->pNext; free(pPos); } 測試函數(shù)如下: SListNode *pFound = Find(pFirst, 1); { if (pFound == NULL) { printf("沒有找到\"); } else { printf("%d\", pFound->data); Erase(&pFirst, pFound); } SListDestroy(&pFirst); } 運行效果如下4.按值刪除(根據(jù)數(shù)據(jù)去刪除,刪除遇到的第一個結(jié)點)
[html] view plain copy
void Remove(SListNode **ppFirst, DataType data) { SListNode *pFound = Find(*ppFirst, data); if (pFound != NULL) { Erase(ppFirst, pFound); } } 測試函數(shù)如下: void TestRemove() { SListNode *pFirst; SListInit(&pFirst); PushBack(&pFirst, 4); PushBack(&pFirst, 3); PushBack(&pFirst, 1); PushBack(&pFirst, 3); PushBack(&pFirst, 3); PushBack(&pFirst, 3); PushBack(&pFirst, 3); PushBack(&pFirst, 3); PushBack(&pFirst, 5); PushBack(&pFirst, 3); Print(pFirst); Remove(&pFirst, 3); Print(pFirst); 運行效果如圖5.按值刪除( 根據(jù)數(shù)據(jù)去刪除,刪除遇到的所有結(jié)點)
[html] view plain copy
void RemoveAll(SListNode **ppFirst, DataType data) { SListNode *pNode = *ppFirst; SListNode *pNext; while (pNode->pNext) { if (pNode->pNext->data == data) { pNext = pNode->pNext; pNode->pNext = pNode->pNext->pNext; free(pNext); } else { pNode = pNode->pNext; } } if ((*ppFirst)->data == data) { PopFront(ppFirst); } } 測試函數(shù)如下: RemoveAll(&pFirst, 3); Print(pFirst); 測試效果如下源代碼如下:
[html] view plain copy
Hello.h #pragma once #include <stdlib.h> #include <assert.h> #include <stdio.h> typedef int DataType; typedef struct SListNode { DataType data; struct SListNode *pNext; } SListNode; // 初始化 void SListInit(SListNode **ppFirst) { assert(ppFirst != NULL); *ppFirst = NULL; } SListNode * CreateNewNode(int data) { SListNode *pNewNode = (SListNode *)malloc(sizeof(SListNode)); assert(pNewNode); pNewNode->data = data; pNewNode->pNext = NULL; return pNewNode; } //打印函數(shù) void Print(SListNode *pFirst) { SListNode *pNode; for (pNode = pFirst; pNode; pNode = pNode->pNext) { printf("%d -> ", pNode->data); } printf("NULL\"); } // 銷毀 void SListDestroy(SListNode **ppFirst) { assert(ppFirst != NULL); SListNode *pNode, *pNext; pNode = *ppFirst; while (pNode != NULL) { pNext = pNode->pNext; free(pNode); pNode = pNext; } *ppFirst = NULL; } // 查找,返回遇到的第一個 // 如果找到了,返回結(jié)點地址 // 否則返回 NULL SListNode * Find(SListNode *pFirst, DataType data) { SListNode *pNode; for (pNode = pFirst; pNode; pNode = pNode->pNext) { if (pNode->data == data) { return pNode; } } return NULL; } // 增刪改查 // 尾插 void PushBack(SListNode **ppFirst, DataType data) { assert(ppFirst != NULL); SListNode *pNewNode = CreateNewNode(data); if (*ppFirst == NULL) { *ppFirst = pNewNode; return; } SListNode *pNode; pNode = *ppFirst; while (pNode->pNext != NULL) { pNode = pNode->pNext; } // pNode 就是倒數(shù)第一個 pNode->pNext = pNewNode; } /* // 頭插 void PushFront(SListNode **ppFirst, DataType data) { assert(ppFirst != NULL); SListNode *pNewNode = CreateNewNode(data); pNewNode->pNext = *ppFirst; *ppFirst = pNewNode; } // 插入到給定結(jié)點 pPos 前,pPos 肯定在鏈表里 void Insert(SListNode **ppFirst, SListNode *pPos, DataType data) { assert(ppFirst != NULL); SListNode *pNode; pNode = *ppFirst; // pPos 是第一個結(jié)點地址 if (pPos == *ppFirst) { PushFront(ppFirst, data); return; } while (pNode->pNext != pPos){ pNode = pNode->pNext; } SListNode *pNewNode = CreateNewNode(data); pNode->pNext = pNewNode; pNewNode->pNext = pPos; } */ // 頭刪 void PopFront(SListNode **ppFirst) { assert(ppFirst != NULL); assert(*ppFirst != NULL); SListNode *pOldFirst = *ppFirst; *ppFirst = (*ppFirst)->pNext; free(pOldFirst); } // 尾刪 void PopBack(SListNode **ppFirst) { assert(ppFirst != NULL); assert(*ppFirst != NULL); if ((*ppFirst)->pNext == NULL) { free(*ppFirst); *ppFirst = NULL; return; } SListNode *pNode = *ppFirst; while (pNode->pNext->pNext != NULL) { pNode = pNode->pNext; } free(pNode->pNext); pNode->pNext = NULL; } // 根據(jù)結(jié)點地址刪除,結(jié)點肯定在鏈表里 void Erase(SListNode **ppFirst, SListNode *pPos) { assert(ppFirst != NULL); assert(*ppFirst != NULL); if (*ppFirst == pPos) { PopFront(ppFirst); return; } SListNode *pCur; for (pCur = *ppFirst; pCur->pNext != pPos; pCur = pCur->pNext) { } // pCur 就是 pPos的前一個 pCur->pNext = pPos->pNext; free(pPos); } /* void TestSList() { SListNode *pFirst; SListInit(&pFirst); assert(pFirst == NULL); PushBack(&pFirst, 1); assert(pFirst != NULL); Print(pFirst); PushBack(&pFirst, 1); PushBack(&pFirst, 2); PushBack(&pFirst, 3); Print(pFirst); PushFront(&pFirst, 5); PushFront(&pFirst, 8); Print(pFirst); SListNode *pFound = Find(pFirst, 3); if (pFound == NULL) { printf("沒有找到\"); } else { printf("%d\", pFound->data); Insert(&pFirst, pFound, 100); } Print(pFirst); PopFront(&pFirst); Print(pFirst); PopBack(&pFirst); Print(pFirst); SListNode *pFound = Find(pFirst, 9); { if (pFound == NULL) { printf("沒有找到\"); } else { printf("%d\", pFound->data); Erase(&pFirst, pFound); } SListDestroy(&pFirst); } } */ // 根據(jù)數(shù)據(jù)去刪除,刪除遇到的第一個結(jié)點 void Remove(SListNode **ppFirst, DataType data) { SListNode *pFound = Find(*ppFirst, data); if (pFound != NULL) { Erase(ppFirst, pFound); } } // 根據(jù)數(shù)據(jù)去刪除,刪除遇到的所有結(jié)點 void RemoveAll(SListNode **ppFirst, DataType data) { SListNode *pNode = *ppFirst; SListNode *pNext; while (pNode->pNext) { if (pNode->pNext->data == data) { pNext = pNode->pNext; pNode->pNext = pNode->pNext->pNext; free(pNext); } else { pNode = pNode->pNext; } } if ((*ppFirst)->data == data) { PopFront(ppFirst); } } void TestRemove() { SListNode *pFirst; SListInit(&pFirst); PushBack(&pFirst, 4); PushBack(&pFirst, 3); PushBack(&pFirst, 1); PushBack(&pFirst, 3); PushBack(&pFirst, 3); PushBack(&pFirst, 3); PushBack(&pFirst, 3); PushBack(&pFirst, 3); PushBack(&pFirst, 5); PushBack(&pFirst, 3); Print(pFirst); Remove(&pFirst, 3); Print(pFirst); RemoveAll(&pFirst, 3); Print(pFirst); }[html] view plain copy
main.c #include"Hello.h" int main(){ TestRemove(); //TestSList(); system("pause"); }到此,單鏈表的基本功能差不多都實現(xiàn)了。
以上就是關(guān)于pos機(jī)反回代碼,c代碼實現(xiàn)鏈表的操作函數(shù) 增減刪改的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)反回代碼的知識,希望能夠幫助到大家!
