無頭單鏈表

2021-08-29 07:37:16 字數 2574 閱讀 9972

鍊錶有單鏈表、雙鏈表和雙向迴圈鍊錶,每種鍊錶都有無頭和帶頭兩種,帶頭就是頭結點不存放資料元素

#ifndef __linklist_h__ 

#define __linklist_h__

#include "stdio.h"

#include "assert.h"

#include "string.h"

#include "malloc.h"

#include "stdlib.h"

typedef int datatype;

typedef struct node

list, *plist;

void initlinklist(plist* pplist);

plist buynode(datatype d);

void destroylinklist(plist* pplist);

void pushback(plist* pplist, datatype d);

void popback(plist* pplist);

void pushfront(plist* pplist, datatype d);

void popfront(plist* pplist);

plist find(plist plist, datatype d);

void insert(plist* pplist, plist pos, datatype d);

void erase(plist* pplist, plist pos);

void remove(plist* pplist, datatype d);

void removeall(plist* pplist, datatype d);

void printlinklist(plist plist);

int getlistlength(plist plist);

void printtailtohead(plist plist);

#endif

#include "linklist.h"

//初始化

void initlinklist(plist* pplist)

//建立結點

plist buynode(datatype d)

//清除鍊錶

void destroylinklist(plist* pplist)

}//尾插

void pushback(plist* pplist, datatype d)

p->next = buynode(d); }}

//尾刪

void popback(plist* pplist)

else

free(tmp->next);

tmp->next = null; }}

//頭插

void pushfront(plist* pplist, datatype d)

//頭刪

void popfront(plist* pplist)

}//找出指定元素

plist find(plist plist, datatype d)

return null;

}//在指定位置之前插入乙個值

void insert(plist* pplist, plist pos, datatype d)

pos = tmp->next;

tmp->next = buynode(d);

tmp->next->next = pos;

}//指定位置刪除

void erase(plist* pplist, plist pos)

while (tmp->next != pos)

pos = tmp->next->next;

free(tmp->next);

tmp->next = pos;

}//刪除指定元素

void remove(plist* pplist, datatype d)

while (tmp->next->data != d)

plist cur = tmp->next->next;

free(tmp->next);

tmp->next = cur;

}//刪除所有的指定元素

void removeall(plist* pplist, datatype d)

else

else

tmp = tmp->next;

} }}//列印

void printlinklist(plist plist)

printf("\n");

}//鍊錶長

int getlistlength(plist plist)

return count;

}//逆序列印單項鍊表

void printtailtohead(plist plist)

printf("%d ", cur->next->data);

tmp = cur->next;

} printf("%d\n", plist->data);

}

單鏈表 無頭節點

就這書上 敲了一邊,加深印象,沒有頭結點的時候插入第乙個就有所不同了,而刪除時要找到前乙個,注意current link null 就這樣。include include include using namespace std struct linknode class list bool list...

無頭單鏈表排序

1 無頭頭插單鏈表排序 思路 在原煉表中逐個比較大小,將最小的插入新的鍊錶 插入順序按照尾插的順序 include include typedef struct person per per head list per one,int num 頭插 void show per head 遍歷 whi...

無頭單鏈表的操作

節點結構 typedef定義 不帶頭節點的單鏈表 typedef int sdatatype 節點結構 typedef struct slistnode node,pnode 鍊錶結構 typedef定義 給乙個鍊錶結構 typedef struct slist slist 鍊錶的初始化 1.斷言 ...