網上有很多關于pos機反回代碼,c代碼實現鏈表的操作函數 增減刪改的知識,也有很多人為大家解答關于pos機反回代碼的問題,今天pos機之家(www.tonybus.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
1、pos機反回代碼
pos機反回代碼
代碼實現鏈表的操作函數
1.首先是尾插 ,要實現尾插,首先的先有一個鏈表,并且為空。
即先構造一個鏈表,并且進行初始化。
[html] view plain copy
//構造鏈表 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; } 下面進行尾插 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 就是倒數第一個 pNode->pNext = pNewNode; } 再加上打印函數與測試函數,main函數。 //print void Print(SListNode *pFirst) { SListNode *pNode; for (pNode = pFirst; pNode; pNode = pNode->pNext) { printf("%d -> ", pNode->data); } printf("NULL\"); } //測試函數 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函數 #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; } 測試函數如下: PushFront(&pFirst, 5); PushFront(&pFirst, 8); Print(pFirst);3.按下標插入(令給定下標是pos,pos一定存在)
[html] view plain copy
void Insert(SListNode **ppFirst, SListNode *pPos, DataType data) { assert(ppFirst != NULL); SListNode *pNode; pNode = *ppFirst; // pPos 是第一個結點地址 if (pPos == *ppFirst) { PushFront(ppFirst, data); return; } while (pNode->pNext != pPos){ pNode = pNode->pNext; } SListNode *pNewNode = CreateNewNode(data); pNode->pNext = pNewNode; pNewNode->pNext = pPos; } 進行按給定位置插入 需確定pos位置,需定義find函數 //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; } 測試函數如下: PopBack(&pFirst); Print(pFirst); 效果如下:3.按位置刪除(根據結點地址刪除,結點肯定在鏈表里,令節點位置為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); } 測試函數如下: SListNode *pFound = Find(pFirst, 1); { if (pFound == NULL) { printf("沒有找到\"); } else { printf("%d\", pFound->data); Erase(&pFirst, pFound); } SListDestroy(&pFirst); } 運行效果如下4.按值刪除(根據數據去刪除,刪除遇到的第一個結點)
[html] view plain copy
void Remove(SListNode **ppFirst, DataType data) { SListNode *pFound = Find(*ppFirst, data); if (pFound != NULL) { Erase(ppFirst, pFound); } } 測試函數如下: 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.按值刪除( 根據數據去刪除,刪除遇到的所有結點)
[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); } } 測試函數如下: 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; } //打印函數 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; } // 查找,返回遇到的第一個 // 如果找到了,返回結點地址 // 否則返回 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 就是倒數第一個 pNode->pNext = pNewNode; } /* // 頭插 void PushFront(SListNode **ppFirst, DataType data) { assert(ppFirst != NULL); SListNode *pNewNode = CreateNewNode(data); pNewNode->pNext = *ppFirst; *ppFirst = pNewNode; } // 插入到給定結點 pPos 前,pPos 肯定在鏈表里 void Insert(SListNode **ppFirst, SListNode *pPos, DataType data) { assert(ppFirst != NULL); SListNode *pNode; pNode = *ppFirst; // pPos 是第一個結點地址 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; } // 根據結點地址刪除,結點肯定在鏈表里 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); } } */ // 根據數據去刪除,刪除遇到的第一個結點 void Remove(SListNode **ppFirst, DataType data) { SListNode *pFound = Find(*ppFirst, data); if (pFound != NULL) { Erase(ppFirst, pFound); } } // 根據數據去刪除,刪除遇到的所有結點 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"); }到此,單鏈表的基本功能差不多都實現了。
以上就是關于pos機反回代碼,c代碼實現鏈表的操作函數 增減刪改的知識,后面我們會繼續為大家整理關于pos機反回代碼的知識,希望能夠幫助到大家!

轉發請帶上網址:http://www.tonybus.com/news/33413.html