日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

链式链表的C风格实现

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链式链表的C风格实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

頭文件:

#ifndef _LINKLIST_H_ #define _LINKLIST_H_typedef void LinkList; //將數據的類型分離,相當于句柄//只是一個小節點 包含著位置信息! typedef struct _tag_LinkListNode {struct _tag_LinkListNode* next; }LinkListNode;//生成一個鏈表 LinkList* LinkList_Create(); //刪除一個鏈表 void LinkList_Destory(LinkList* list); //清空一個鏈表 void LinkList_Clear(LinkList* list); //鏈表長度 int LinkList_Length(LinkList* list); //在某個位置插入一個節點 int LinkList_Insert(LinkList* list, LinkListNode* node, int pos); //獲取某個位置的節點 LinkListNode* LinkList_Get(LinkList* list, int pos); //刪除某個位置的節點 LinkListNode* LinkList_Delete(LinkList* list, int pos);#endif

CPP文件:

#include "linkList.h" #include <iostream> using namespace std;//定義一個鏈表頭 typedef struct _tag_LinkList {LinkListNode header; //定義一個頭結點int length;}tagList;//生成一個鏈表 LinkList* LinkList_Create() {tagList * ret = NULL;ret = (tagList *)malloc(sizeof(tagList)); //分配內存memset(ret, 0, sizeof(tagList)); //memset快速填充 ret->header.next = NULL; //頭結點的Next指向NULLret->length = 0;return ret; } //刪除一個鏈表 void LinkList_Destory(LinkList* list) {//異常處理if (list != NULL){free(list);list = NULL;}return; } //清空一個鏈表 void LinkList_Clear(LinkList* list) {tagList *tList = NULL;if(list == NULL){cout << "LinkList_Clear Err" << endl;return;}tList = (tagList *)list;tList->length = 0;tList->header.next = NULL;return; } //鏈表長度 int LinkList_Length(LinkList* list) {tagList *tList = NULL;if(list == NULL){cout << "LinkList_Length Err" << endl;return -1;}tList = (tagList *)list;return tList->length; } //在某個位置插入一個節點//鏈表是單向的 POS位置保存在POS-1的NEXT域里面int LinkList_Insert(LinkList* list, LinkListNode* node, int pos) {int ret = 0;LinkListNode* current = NULL; //定義輔助指針變量Current tagList* tList;if (list == NULL || node == NULL || pos <0){ret = -1;cout << "Insert Err" << endl;return ret;}tList = (tagList*)list;current = &(tList->header); //Current首先指向頭結點for(int i = 0; ((i < pos) && (current->next !=NULL)); i++){current = current->next; //指向POS節點的前一個位置 }//node的NEXT改變 將Current的NEXT域的信息存入node的NEXT域node->next = current->next;//Current的NEXT域指向node 從而實現插入current->next = node;tList->length++;return 0; } //獲取某個位置的節點 LinkListNode* LinkList_Get(LinkList* list, int pos) {int ret = 0;LinkListNode* current = NULL; //輔助節點指針變量LinkListNode* temp = NULL;tagList* tList;if (list == NULL || pos <0){ret = -1;cout << "Get Err" << endl;return NULL;}tList = (tagList*)list;current = &(tList->header); //Current首先指向頭結點for(int i = 0; ((i < pos) && (current->next !=NULL)); i++){current = current->next;}temp = current->next;//返回Current的Next域為POS位置信息return temp; }//刪除某個位置的節點 LinkListNode* LinkList_Delete(LinkList* list, int pos) {int ret = 0;LinkListNode* current = NULL; LinkListNode* temp = NULL; //定義中間指針變量 tagList* tList;if (list == NULL || pos <0){ret = -1;cout << "Get Err" << endl;return NULL;}tList = (tagList*)list;current = &(tList->header);for(int i = 0; ((i < pos) && (current->next !=NULL)); i++){current = current->next; //Current指向POS節點的前一個位置 }//temp指針指向POS位置的節點temp = current->next;//將temp 也就是POS位置的NEXT域值賦給CurrentNext域 從而實現跳過刪除current->next =temp->next;tList->length--;return temp; }

測試函數:

#include <iostream> #include "linkList.h" using namespace std;typedef struct _Teacher {LinkListNode node; //必須在所需要的數據結構中添加LinkListNode類型的node!!int age;char name[64]; }Teacher;int main() {int len = 0;int ret = 0;LinkList* list = NULL;Teacher t1, t2, t3, t4, t5;t1.age = 31; t2.age = 32;t3.age = 33;t4.age = 34;t5.age = 35;//創建list = LinkList_Create();if(list == NULL){return -1;}len = LinkList_Length(list);//逐條插入ret = LinkList_Insert(list, (LinkListNode*)(&t1), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t2), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t3), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t4), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t5), 0);for (int i = 0; i < LinkList_Length(list); i++){cout << "List的遍歷" << endl;cout << "age:" << ((Teacher*)LinkList_Get(list, i))->age << endl;}cout << endl;//頭刪while(LinkList_Length(list) > 0){cout << "刪除的元素:" << ((Teacher*)LinkList_Delete(list, 0))->age << endl;}system("pause");return 0; }

?

轉載于:https://www.cnblogs.com/Lxk0825/p/9519919.html

總結

以上是生活随笔為你收集整理的链式链表的C风格实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。