#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 單鏈表是由每個結點的指標域按照邏輯次序相互連線而成的。...