#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define free_node free
#define __INIT_HEAD__(h) (h = NULL)
#define __CAL_BUFFER_NODE__(ptr, type, member) ((type*)(((unsigned char*)ptr) - ((unsigned int)(&(((type*)NULL)->member)))))
struct entryTool {
entryTool* _tool;
};
typedef entryTool* entry_list;
struct entry {
int sId;
char sNm[20];
entryTool next;
};
entry* initList(const int, const char*);
void insertEntry_H(entry_list*, entryTool*); // 采用头插法
void insertEntry_T(entry_list*, entryTool*); // 采用尾插法
void removeEntry(entry_list*, entryTool*);
int main(int argc, char* argv[]) {
entry_list hdptr;
__INIT_HEAD__(hdptr);
entry *s = initList(1, "小红");
insertEntry_H(&hdptr, &(s->next));
s = initList(2, "小绿");
insertEntry_T(&hdptr, &(s->next));
s = initList(3, "小蓝");
insertEntry_T(&hdptr, &(s->next));
entryTool* _find = hdptr;
while (_find) {
s = __CAL_BUFFER_NODE__(_find, entry, next);
printf("%d %s\n", s->sId, s->sNm);
_find = _find->_tool;
}
while (hdptr) {
_find = hdptr;
removeEntry(&hdptr, _find);
s = __CAL_BUFFER_NODE__(_find, entry, next);
free_node(s);
printf("执行删除...\n");
printf("删除成功...\n");
printf("\n");
}
_find = hdptr;
while (_find) {
s = __CAL_BUFFER_NODE__(_find, entry, next);
printf("%d %s\n", s->sId, s->sNm);
_find = _find->_tool;
}
system("pause");
return 0;
}
entry* initList(int sId, const char* sNm) {
entry* newEntry = (struct entry*)malloc(sizeof(struct entry));
memset(newEntry, 0, sizeof(entry));
newEntry->sId = sId;
strcpy_s(newEntry->sNm, sNm);
return newEntry;
}
void insertEntry_H(entry_list* _hdptr, entryTool* _ndptr) {
entryTool** hdptr = _hdptr;
_ndptr->_tool = *hdptr;
*hdptr = _ndptr;
}
void insertEntry_T(entry_list* _hdptr, entryTool* _ndptr) {
entryTool** hdptr = _hdptr;
while ((*hdptr)) {
hdptr = &(*hdptr)->_tool;
}
*hdptr = _ndptr;
_ndptr->_tool = NULL;
}
void removeEntry(entry_list* _hdptr, entryTool* _ndptr) {
entryTool** hdptr = _hdptr;
while ((*hdptr)) {
if ((*hdptr) == _ndptr) {
(*hdptr) = _ndptr->_tool;
_ndptr = NULL;
return;
}
}
}
C语言链表
小程序 [链表]
最新推荐文章于 2022-09-01 11:43:17 发布