#include "pch.h" #include <iostream> //創建鏈表 typedef struct ListTable { int nElement; //鏈表元素 int nSequence; //節點序號 ListTable *pNext;//下一個節點 }ListTable; //初始化鏈表 //參數:元素的值 ListTable* initListTable(int nNum) { //頭結點 ListTable *head; //申請內存 head = (ListTable*)malloc(sizeof(ListTable)); //初始化成員變量 head->nElement = nNum; head->nSequence =1; head->pNext = NULL; //返回頭結點指針 return head; } //插入元素 //參數:鏈表指針 元素的值 void insertElement(ListTable *list, int nNum) { //創建局部變量 ListTable *pList = list; int nCount = list->nSequence; //申請新的節點空間 ListTable *pNode = (ListTable*)malloc(sizeof(ListTable)); //遍歷鏈表 while (pList != NULL) { //如果下一個節點爲空,則插入元素 if (pList->pNext ==NULL) { pList->pNext = pNode; pNode->nSequence = nCount + 1; pNode->nElement = nNum; pNode->pNext = NULL; return; } nCount += 1; pList = pList->pNext; } } //刪除指定序號元素 //參數:鏈表指針 元素序號 void deleteElement(ListTable *list,int nSequence) { //如果是第一個節點,直接free if (list->nSequence == nSequence) { free(list); return; } //創建局部變量 ListTable *pList = list; ListTable *pTmp=NULL; //遍歷鏈表 while (pList!=NULL) { //如果序號相等,刪除指定序號元素 if (pList->pNext->nSequence == nSequence) { pTmp = pList->pNext->pNext; free(pList->pNext); pList->pNext = pTmp; //之後的序號依次減一 while (pTmp != NULL) { pTmp->nSequence -= 1; pTmp = pTmp->pNext; } return; } pList = pList->pNext; } printf("節點不存在!\n"); } //修改元素 //參數:鏈表指針 元素序號 元素的值 void changeElement(ListTable *list, int nSequence,int nNum) { ListTable *pList = list; while (pList != NULL) { if (pList->nSequence == nSequence) { pList->nElement = nNum; return; } pList = pList->pNext; } printf("節點不存在!\n"); } //釋放鏈表 //參數:鏈表指針 void deleteListTable(ListTable *list) { ListTable *pList = list; ListTable *pTmp=NULL; while (pList != NULL) { pTmp= pList->pNext; free(pList); pList = pTmp; } printf("釋放完成!\n"); } //遍歷鏈表元素 //參數:鏈表指針 void showElement(ListTable *list) { ListTable *pList = list; if (pList == NULL) { printf("鏈表爲空!\n"); return; } while (pList != NULL) { printf("鏈表元素:%d 元素序號:%d\n", pList->nElement, pList->nSequence); pList = pList->pNext; } } int main() { //初始化鏈表 第一個元素爲1 ListTable *list= initListTable(1); //插入2,3,4,5四個元素 insertElement(list, 2); insertElement(list, 3); insertElement(list, 4); insertElement(list, 5); //修改序號5的元素爲6 changeElement(list, 5, 6); //刪除序號爲3的元素 deleteElement(list, 3); //遍歷 showElement(list); //釋放 deleteListTable(list); }
vs2017編譯