鍊錶的好處在於插入和刪除元素時只需改變指標的指向,減少操作次數。鍊錶的儲存結構可以是順序的(靜態鍊錶)也可以是無序的。缺點是隨機訪問時需要遍歷整個表。本文用無序的儲存結構實現了單鏈表。
//線性表的鏈式表示(單向鍊錶)
//lovesunmoonlight
#include#include#include#includeusing namespace std;
ofstream out;
typedef struct elemtype
;typedef struct lnode
lnode,*linklist;
bool getelem_l(const linklist& l,int i,elemtype& e)
e=p->data;
return true;
}//在第i個位置插入,核心是修改第i-1個位置節點的指標域
bool listinsert_l(linklist& l,int i,elemtype e)
if(!p||j>i-1)
return false;
lnode* s=(linklist)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}bool listdelete_l(linklist& l,int i,elemtype& e)
if(!p||j>i-1)
return false;
lnode* q=p->next;
e=q->data;
p->next=q->next; //修改i-1位置的指標,指向被刪除節點的下乙個位置
free(q); //釋放節點空間
return true; }
//輸入資料
void input(lnode* &p)
//生成長度為n的鍊錶(逆序)
void createlist_l(linklist& l,int n)
}//輸出
void output(const linklist& l)
} //判斷鍊錶是否為空
bool isempty_l(const linklist& l)
int main()
{ out.open("result.txt");
//初始化表
linklist l;
createlist_l(l,10);
out<<"initialized: "<
線性表的鏈式表示 迴圈單鏈表(C )
迴圈單鏈表和單鏈表的區別在於,表中的最後乙個結點的指標不是null,而改為指向頭結點,從而整個鍊錶形成乙個環。迴圈單鏈表可以從表中任意乙個結點開始遍歷整個鍊錶。不僅可以設定頭指標,還可設定尾指標,對於表頭與表尾進行操作都只需要o 1 的時間複雜度 迴圈單鏈表中結點型別的描述如下 typedef st...
線性表的鏈式表示 雙鏈表(C )
由於單鏈表結點中只有乙個指向其後繼的指標,使得單鏈表只能從頭結點依次順序地向後遍歷。訪問後繼結點的時間複雜度為o 1 訪問前驅節點的時間複雜度為o n 為了克服單鏈表的上述缺點,引入了雙鏈表,雙鏈表結點中有兩個指標prior和next,分別指向其前驅節點和後繼結點,使得訪問前後結點的時間複雜度都為o...
線性表的鏈式表示
上篇文章是線性表的順序表示,本篇便是線性表的鏈式表示。主函式的步驟包括,輸入線性表資料,對鍊錶的刪除,插入。利用指標進行對鍊錶的訪問。同時為了增加程式可讀性,將結構體定義為lnode,linklist。include 線性表的鏈式表示 using namespace std typedef stru...