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指標,至於區別在 呢?就是傳統鍊錶的指標域在...