C語言之雙向鍊錶之操作

2021-07-05 05:26:52 字數 2379 閱讀 5755

雙向鍊錶的基本運算:

1、查詢

假若我們要在乙個帶表頭的雙向迴圈鍊錶中查詢資料域為一特定值的某個結點時,我們同樣從表頭結點往後依次比較各結點資料域的值,若正是該特定值,則返回指向結點的指標,否則繼續往後查,直到表尾。

下例就是應用雙向迴圈鍊錶查詢演算法的乙個程式。

#include

#include

#define n 10

typedef struct node

stud;

stud * creat(int n)

h->name[0]='\0';

h->llink=null;

h->rlink=null;

p=h;

for(i=0;irlink=s;

printf("請輸入第%d個人的姓名",i+1);

scanf("%s",s->name);

s->llink=p;

s->rlink=null;

p=s;

}h->llink=s;

p->rlink=h;

return(h);

}stud * search(stud *h,char *x)

printf("沒有查詢到該資料!");

}void print(stud *h)

printf("\n");

}main()

2、插入

對於雙向迴圈鍊錶,我們現在可以隨意地在某已知結點p前或者p後插入乙個新的結點。

假若s,p,q是連續三個結點的指標,若我們要在p前插入乙個新結點r,則只需把s的右鏈域指標指向r,r的左鏈域指標指向s,r的右鏈域指標指向p,p的左鏈域指標指向r即可。

在p,q之間插入原理也一樣。

下面就是乙個應用雙向迴圈鍊錶插入演算法的例子:

#include

#include

#include

#define n 10

typedef struct node

stud;

stud * creat(int n)

h->name[0]='\0';

h->llink=null;

h->rlink=null;

p=h;

for(i=0;irlink=s;

printf("請輸入第%d個人的姓名",i+1);

scanf("%s",s->name);

s->llink=p;

s->rlink=null;

p=s;

}h->llink=s;

p->rlink=h;

return(h);

}stud * search(stud *h,char *x)

printf("沒有查詢到該資料!");

}void print(stud *h)

printf("\n");

}void insert(stud *p)

printf("請輸入你要插入的人的姓名:");

scanf("%s",stuname);

strcpy(s->name,stuname);

s->rlink=p->rlink;

p->rlink=s;

s->llink=p;

(s->rlink)->llink=s;

}main()

3、刪除

刪除某個結點,其實就是插入某個結點的逆操作。還是對於雙向迴圈鍊錶,要在連續的三個結點s,p,q中刪除p結點,只需把s的右鏈域指標指向q,q的左鏈域指標指向s,並收回p結點就完成了。

下面就是乙個應用雙向迴圈鍊錶刪除演算法的例子:

#include 

#include 

#include 

#define n 10

typedef struct node

stud;

stud * creat(int n)

h->name[0]='\0';

h->llink=null;

h->rlink=null;

p=h;

for(i=0;i〈n;i++)

p-〉rlink=s;

printf("請輸入第%d個人的姓名",i+1);

scanf("%s",s->name);

s->llink=p;

s->rlink=null;

p=s;

}h->llink=s;

p->rlink=h;

return(h);

}stud * search(stud *h,char *x)

printf("沒有查詢到該資料!");

}void print(stud *h)

printf("\n");

}void del(stud *p)

main()

C語言 之鍊錶操作

常見資料結構有 表棧 佇列樹鍊錶相對於陣列有很多優點,現在總結一下鍊錶的常用操作。1.單鏈表新增節點 include include includestruct list node typedef struct list node list one list one head null 定義乙個全域...

C語言之鍊錶

鍊錶的觀念 鍊錶是一種物理儲存上非連續,資料元素的邏輯順序通過鍊錶中的指標鏈結次序,實現的一種線性儲存結構。特點 鍊錶由一系列節點 鍊錶中每乙個元素就稱為節點 組成,節點在執行時動態生成 malloc 每個節點包括兩部分 乙個是儲存資料元素的資料域 乙個是儲存下乙個節點位址的指標域 定義乙個鍊錶 t...

c語言 鍊錶 C語言之鍊錶入門

鍊錶三要素 1 頭指標 head 是用來說明鍊錶開始了,頭指標就代表鍊錶本身 所以以後要訪問鍊錶,就要訪問頭指標 2 結點 node 鍊錶中每乙個結構體變數 3 尾指標 用來說明鍊錶的結束 它是乙個空指標,null include includetypedef struct stud 定義了乙個結構...