單鏈表的建立及操作

2021-07-06 03:36:59 字數 2885 閱讀 4473

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)

lnode *p, *s;

int j = 0;

p = h;

while (p&&j

if (p)

else

5、刪除(刪除p的後繼結點q)

演算法思路:

(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...