1、單鏈表的結構體演算法:
typedef char elemtype;
typedef struct node
lnode,*linklist; //lnode為結點型別,linklist為指向結點的指標型別
2、建立單鏈表
(1)頭插法(從表尾到表頭逆向建立)
演算法思路:
(1)首先建立乙個頭結點h,並使頭結點的指標域為空
(2)讀入值
(3)建立乙個新結點p
(4)將ch賦給p的資料域
(5)分別改變 新結點p的指標域 和 頭結點h的指標域,使p成為h的直接後繼
(6)重複(2)到(5),知道不滿足迴圈條件為止
lnode *creat()
elemtype ch;
lnode *h, *p;
h = (lnode *)malloc(sizeof(lnode)); //建立頭結點h
h->next = null; //使頭結點的指標域為空
while ((ch=getchar())!='\n')
return h;(2)尾插法(從表頭到表尾建立)
lnode *creat()
elemtype ch;
lnode *h, *p, *t;
h = (lnode *)malloc((sizeof(lnode)));
h->next = null;
t = h;
while ((ch=getchar())!='\n')
return h;3、求表長(結點個數)
演算法思路:
(1)設定 乙個指標變數p 和 乙個整型變數i(做計數器)
(2)讓 p指向第乙個結點,並i=0
(3)指標p在單鏈表中後移,且i增加1
(4)當 p=null時,單鏈表結束,計數完畢,i即表長
int lenth(lnode *h) //頭指標
return i;
}4、插入
p結點之後插入值為x的新結點s
插入前後指標變化**:
演算法思路:
(1)生成乙個新結點s
(2)將x賦給新結點s的資料域
(3)將新結點插入單鏈表中
關鍵語句:
s->next=p->next;
p->next=s;
void insert(lnode *p, elemtype x) //將值為x的結點插入p之後
拓展:在單鏈表中第i個元素之前插入乙個元素的演算法
int insert(lnode *h, int i, elemtype x)5、刪除(刪除p的後繼結點q)lnode *p, *s;
int j = 0;
p = h;
while (p&&j
if (p)
else
演算法思路:
(1)將q指向p結點的直接後繼
(2)改變指標鏈結,把 q結點的直接後繼作為p結點的直接後繼
(3)刪除q結點
(4)釋放q結點空間
關鍵語句:
q=p->next;
p->nextt=p->next;
void dele(lnode *p)
}6、查詢
演算法思路:
(1)從第乙個結點開始遍歷,將資料域與x比較
(2)找到並返回該結點指標
lnode *search(lnode *h, elemtype x)
return p;
}7、取元素
演算法思路:
(1)p從第乙個結點出發,定義j=1
(2)移動指標p,累積j
(3)查詢j=i的結點
(4)重複(2)到(3)直到p為空或指向第i個元素
lnode *get(lnode *h,int i)
if (i == j)
return p; //返回第i個元素的儲存位址
else
}
單鏈表的建立及基本操作
鍊錶作為資料結構中最容易理解的結構,我們需要對它的基本操作非常熟悉 結點結構 typedef struct node node,snode 基本操作 初始化 初始化 snode init 建立鍊錶 頭插法建立單鏈表 snode create1 int n return head 尾插法建立單鏈表 s...
單鏈表及雙鏈表操作
0.刪除 單鏈表 若要刪除乙個節點p,需知道前乙個節點的位置 node searchpr node h,int k return null 沒有值為k的節點,返回空 void deletnode node h,int k 0.1.節點定義 typedef struct nodenode 1.鍊錶建立...
單鏈表的基本操作(建立,輸出及排序)
今天總結了一下單鏈表的基本操作 建立,求長度,輸出結點,排序 冒泡及歸併 include include using namespace std struct listnode 尾插法,新建乙個鍊錶 listnode creatlist else cycle 0 head head next hea...