對於單向鍊錶的10幾種常用演算法 c 語言

2021-09-23 06:08:50 字數 3111 閱讀 1091

如果要看c語言的請轉到

table.cpp檔案

#include "table.h"

table::~table()

// 鍊錶初始化

void table::listinit(list_data *head)

// 資料報初始化

void table::datainit(data *data)

// 判斷鍊錶是否為空

bool table::listempty(list_data *head)

// 求鍊錶長度

int table::listlength(list_data *head)

return i;

}// 返回head鍊錶pos節點的資料

list_data *table::listposdata(list_data *head, int pos)

return node;

}// 在尾部刪除元素

void table::listdeleteend(list_data *head)

delete p;

p = null;

ptemp->pnext = null;

}}// 在頭部刪除元素

void table::listdeletehead(list_data *head)

}// 刪除鍊錶head中第pos個節點的資料

void table::listdeletepos(list_data *head, int pos)

else

p->pnext = ptemp->pnext;

delete ptemp;

ptemp = null;

}}// 頭新增

void table::listaddhead(list_data *head, data data)

newnode->pnext = p->pnext;

p->pnext = newnode;

}// 尾巴新增

void table::listaddend(list_data *head, data data)

else

p->pnext = newnode;

}}// 任意改動

void table::listchangepos(list_data *head, data data, int pos)

// 銷毀鍊錶

void table::listfree(list_data *head)

head->pnext = null;

}

table.h 檔案

#ifndef _table_h_

#define _table_h_

#include #include #include #include #include using namespace std;

typedef unsigned char u8;

typedef struct listdata;

typedef struct task list_data;

class table

;#endif

測試用main.cpp檔案

#include "table.h"

list_data *head = new list_data;

table list;

void add_head()//往頭新增資料 }

void add_end()//往尾部加資料 }

void printf_data(list_data *head)

printf("\n");

}int main(int argc, char const *ar**)

else

printf("**********鍊錶長度*****====\n");

printf("len = %d\n",list.listlength(head));

printf("*****===往頭部新增資料*****==\n");

add_head();

printf_data(head);

printf("*****===往尾部新增資料*****==\n");

add_end();

printf_data(head);

printf("**********鍊錶長度*****====\n");

printf("len = %d\n",list.listlength(head));

printf("*****===任意改動*****==\n");

data node;

node.num = 10;

list.listchangepos(head, node, 2);

printf_data(head);

printf("*****===刪除鍊錶head中第2個節點的資料*****==\n");

list.listdeletepos(head,2);

printf_data(head);

printf("**********=獲取第三個節點資料**********\n");

list_data *data = list.listposdata(head,3);

printf("num=[%d]\n",data->data.num);

printf("**********==尾部刪除*****====13\n");

list.listdeleteend(head);

printf_data(head);

printf("**********==頭部刪除*****====13\n");

list.listdeletehead(head);

printf_data(head);

printf("**********==銷毀鍊錶*****====13\n");

list.listfree(head);//銷毀鍊錶

printf_data(head);

printf("**********鍊錶長度*****====\n");

printf("len = %d\n",list.listlength(head));

}

對於單向鍊錶的10幾種常用演算法 c語言

如果要看c 版本的,請轉 list.c檔案如下 include list.h 返回head鍊錶pos節點的位置 link list moov pos link head,int pos 求鍊錶長度 int list length link head return i 判斷鍊錶是否為空 bool li...

10單向鍊錶(slist)

1 slist概述 slist並不在標準規格之內,sllist和list的主要差別在於,slist的迭代器屬於單向的forward iterator,而list的迭代器屬於雙向的bidirectional iterator。由於slist沒有任何方便的辦法可以回頭定出前乙個位置,必須從頭找起,所以對...

演算法 反轉單向鍊錶

廢話少說,直接上 單向鍊錶模型,如下 public class listnode override public string tostring sb.return sb.tostring 方法一 遍歷元素,依此反轉位置private static listnode reversenode1 lis...