企業鍊錶小框架搭建

2021-09-25 08:16:55 字數 4099 閱讀 1353

listnode.h檔案:

#pragma once

#includetypedef struct listnode

listnode;

typedef struct linkstack

linkstack;

// 列印函式指標

typedef void(*printlinknode)(void*);

typedef int(*comparenode)(listnode*, listnode*);

//初始化鍊錶

linkstack *init_listnode();

//指定位置插入

void insert_listnode(linkstack*linklist, int pos, listnode*data);

//刪除指定位置的值

void delete_linklist(linkstack*linklist, int pos);

//獲取鍊錶長度

int size_linklist(linkstack*linklist);

//查詢

int find_linklist(linkstack*linklist, listnode *data, comparenode compare);

//返回第乙個節點

void* first_linklist(linkstack*linklist);

//列印鍊錶

void prinf_linklist(linkstack*linklist, printlinknode print);

//釋放鍊錶記憶體

void freespalce_linklist(linkstack*linklist);

listnode.cpp檔案:

#include"listnode.h"

//初始化鍊錶

linkstack *init_listnode()

;//指定位置插入

void insert_listnode(linkstack*linklist, int pos, listnode*data)

if (data==null)

listnode *pcurrent = linklist->head;

for (int i = 0; i < pos; i++)

data->next = pcurrent->next;

pcurrent->next = data;

linklist->size++;

};//刪除指定位置的值

void delete_linklist(linkstack*linklist, int pos)

if (pos<0||pos>=linklist->size)

listnode*pcuttent = linklist->head;

for (int i = 0; i < pos; i++)

/*listnode*del = pcuttent->next;

pcuttent->next = del->next;

free(del);沒有拿到記憶體所有不用釋放*/

pcuttent->next = pcuttent->next->next;//直接覆蓋更改位址

linklist->size--;

};//獲取鍊錶長度

int size_linklist(linkstack*linklist)

return linklist->size;

};//查詢

int find_linklist(linkstack*linklist, listnode *data, comparenode compare)

if (data == null)

int pos = -1;

int i=0;

listnode*pcurrent = linklist->head->next;

while (pcurrent!=null)

i++;

pcurrent = pcurrent->next;

} return pos;

};//返回第乙個節點

void* first_linklist(linkstack*linklist)

return linklist->head->next;

};//列印鍊錶

void prinf_linklist(linkstack*linklist, printlinknode print)

listnode*pcurrent = linklist->head;

while (pcurrent!=null) };

//釋放鍊錶記憶體

void freespalce_linklist(linkstack*linklist)

linklist->size = 0;

if (linklist->head!=null)

free(linklist);

};

main.cpp:

#include"listnode.h"

using namespace std;

#includetypedef struct person

person;

void myprinf(void*data)

person *p = (person*)data;

printf("name:%s age:%d\n", p->name, p->age);

}int mycompare(listnode*node1,listnode*node2)

return -1;

}void main()

; person p2 = ;

person p3 = ;

person p4 = ;

person p5 = ;

insert_listnode(linkstack, 0,(listnode*)&p1);

insert_listnode(linkstack, 0,(listnode*)&p2);

insert_listnode(linkstack, 0,(listnode*)&p3);

insert_listnode(linkstack, 0,(listnode*)&p4);

insert_listnode(linkstack, 0,(listnode*)&p5);

prinf_linklist(linkstack, myprinf);

int size = size_linklist(linkstack);

cout << "size:" << size << endl;

cout << endl;

delete_linklist(linkstack, 3);

cout << "-----刪除位置3後-----" << endl;

prinf_linklist(linkstack, myprinf);

size = size_linklist(linkstack);

cout << "size:" << size << endl;

cout << endl;

cout << "-----返回第乙個位置-----" << endl;

person*first = (person*)first_linklist(linkstack);

printf("name:%s age:%d\n", first->name, first->age);

cout << endl;

int no = find_linklist(linkstack, (listnode*)&p3, mycompare);

cout <<"p3是第" << no << "個" << endl;

cout << endl;

//釋放鍊錶記憶體

freespalce_linklist(linkstack);

}

渺小!!!!渺小!!!!

渺小!!!!渺小!!!!

渺小!!!!渺小!!!!

渺小!!!!渺小!!!!

迴圈鍊錶企業鍊錶

一 特點 讓鍊錶的最後乙個結點的next指標指向頭結點。初始化小節點時直接讓next指標指向鍊錶的頭結點。二 include include include 小結點 typedef struct listnode listnode 鍊錶結點 typedef struct circularlist c...

C 企業 鍊錶

include using namespace std class linked typedef void print linked 列印方法函式型別 class linkestruct class teacher linkestruct linkestruct linkestruct linkes...

C 企業鍊錶

c 企業鍊錶 開發工具與關鍵技術 c visualstudio所謂的企業鍊錶其實只是因為企業經常用到,所以叫企業鍊錶,它相當於linux核心鍊錶的公升級版,那麼這兩種鍊錶和傳統鍊錶有什麼區別,它們和傳統鍊錶的區別就在於它們的指標域,也就鍊錶節點中的next指標,至於區別在 呢?就是傳統鍊錶的指標域在...