線性表的鏈式儲存及其基本操作

2021-09-29 01:16:59 字數 3134 閱讀 2953

#include  "pch.h"

#include #include #include #include typedef struct link

link;

/* error

初始化操作由「case」標籤跳過

case 下 加 {}

*/// 初始化鍊錶

link * initlink();

//帶頭結點的初始化

link * createlistf(int acopy, int length);

// 求表長

int lebgthlisth(link *p);

// 鍊錶插入的函式,p是鍊錶,elem是插入的結點的資料域,add是插入的位置

link * insertelem(link * p, int elem, int location);

//刪除結點的函式,p代表操作鍊錶,add代表刪除節點的位置

link * delelem(link *p, int location);

//查詢結點的函式,elem為目標結點的資料域的值

link * selectbynum(link * p, int location); // 根據序號

int selectbyvalue(link * p, int elem); // 根據值

//更新結點的函式,newelem為新的資料域的值

link *amendelem(link * p, int location, int newelem);

// 結點的逆置

void inverselink(link *p);

// 顯示鍊錶

void display(link *p);

void list_reverse(link* l);//鍊錶轉置

void menulinkshow()

// 選單選擇

void menulinkselect(link *p ,char ch)

else

break;

}case '5':

else

break;

}case '6':

else

break;

}case '7':

case '8':

case '9':

case '0': }

}/**

int main()

; int length = sizeof(a) / sizeof(a[0]); // 陣列的長度

link * p = createlistf(a, length);

//初始化鍊錶(1,2,3,4)   

printf("初始化鍊錶為:\n");

// link *p = initlink();

display(p);

printf("請根據選單選擇所需要的操作: ");

char ch;

ch = getchar();

// getchar();

menulinkselect(p, ch);

printf("\n按任意鍵繼續!\n");

_getch();

_flushall(); }}

**/// 初始化帶頭結點

link * createlistf(int acopy, int length)

return p;

}//建立乙個新結點

link * create_node(int data)

/* 初始化鍊錶 [ 頭插法] */

link * initlink()

return p;

}// 顯示結點

void display(link *p)

printf("\n");

}// 求表長

int lebgthlisth(link *p)

return j;

}// 鍊錶中 根據序號查詢某結點

link * selectbynum(link *p, int location)

if (location ==j)

else }

int selectbyvalue(link * p, int elem)

int length = lebgthlisth(p); // 求表長度

if (j <= length) // 未超過表長返回位置

else

}//將值為x的結點 插入到帶頭結點的單鏈表head的第i個結點的位置上

// 鍊錶插入的函式,p是鍊錶,elem是插入的結點的資料域,add是插入的位置

link * insertelem(link * p, int elem, int location)

link * node = create_node(elem); // 建立插入的結點

if (node != null)

else

display(p);

return p; // 返回頭結點

}// 刪除結點

link * delelem(link *p, int location)

pp->next = pp->next->next;

display(p);

return p;

}// 更新結點

link *amendelem(link * p, int location, int newelem)

// 鍊錶 結點逆置【方法一】由問題 採用頭插法

void inverselink(link *l) // l 為頭結點

link * p, * q; // q 結點作為輔助結點來記錄p的後繼結點的位置

p = l->next; // 指向頭結點

l->next = null;

while (p!=null)

display(l); }

// 鍊錶 結點逆置【方法二】

void list_reverse(link* l)//鍊錶轉置

p2->next = p1;

p3->next = p2;

l->next = p3;

display(l);

}

鏈式線性表的基本操作

include include define error 0 define ok 1 define elemtype int typedef struct lnode lnode,linklist int createlink l linklist l,int n return ok int loa...

線性表的鏈式儲存

此方法雖然簡單,但是真寫起來太複雜了。線性表的鏈式儲存 include include struct lnode 線性表的初始化 void init l lnode l 線性表的後插建立 void create l1 lnode l n next null 線性表的後插建立 void create ...

線性表的鏈式儲存

引言 一 單鏈表 相較於順序儲存用連續的儲存單元儲存,單鏈表採用鏈式儲存結構,用一組位址任意的儲存單元儲存資料元素。特點 1 儲存單元可以是不連續的,即邏輯結構與物理結構可以不相同 2 元素用結點儲存,每個結點由元素值和下乙個元素的位址構成 3 單鏈表是由每個結點的指標域按照邏輯次序相互連線而成的。...