鍊錶的增 刪 查 找

2021-08-13 20:35:50 字數 3773 閱讀 6118

基本結構

typedef int datatype;

typedef struct slistnode

slistnode;

新建節點

和動態順序表不一樣,每次只開闢乙個節點的空間,將其節點的指標域賦為空

**:

slistnode* buyslistnode(datatype x)

newnode->_data = x;

newnode->_next =

null;

return newnode;

}

列印鍊錶

動態順序表是通過下標來進行訪問,而鍊錶是通過指標訪問到每乙個節點,當某一節點的指標域為空時,說明鍊錶到尾

**:

void slistprint(slistnode* phead)

printf("\n");

}

鍊錶的頭插(過程如下圖)

}煉表頭刪(過程如下圖)

}尾插(過程與頭插想類似在這裡不在畫圖)

**:

void slistpushback(slistnode** pphead, datatype x)

else

cur->_next = buyslistnode(x);}}

尾刪

**:

void slistpopback(slistnode** pphead)

else

if ((*pphead)->_next ==

null)

else

free(cur->_next);

cur->_next =

null;}}

任意位置插入(指頭插)

在這裡需要注意幾點:

1)鍊錶為空時,只需呼叫頭插即可

2)鍊錶有乙個及以上節點時,需注意儲存該位置的前一位置,將其與前一位置相連

}任意位置刪除(刪除方法類似頭插,不在畫圖)

**:

void slisterase(slistnode** pphead, slistnode* pos)

else

else

if (pos == null)

else

prev->_next = pos->_next;

free(pos);}}

}

下面給出完整**及測試用例:

seqlist.c:

slistnode*

list;

//新建乙個節點

slistnode* buyslistnode(datatype x)

newnode->_data = x;

newnode->_next =

null;

return newnode;

}//列印鍊錶

void slistprint(slistnode* phead)

printf("\n");

}//釋放節點

void slistdestory(slistnode** pphead)

//尾插

void slistpushback(slistnode** pphead, datatype x)

else

cur->_next = buyslistnode(x);

}}//尾刪

void slistpopback(slistnode** pphead)

else

if ((*pphead)->_next ==

null)

else

free(cur->_next);

cur->_next =

null;

}}//頭插

void slistpushfront(slistnode** pphead, datatype x)

else

}//頭刪

void slistpopfront(slistnode** pphead)

else

}//任意位置插入

void slistinsest(slistnode** pphead, slistnode* pos, datatype x)

else

slistnode* newnode = buyslistnode(x);

newnode->_next = prev->_next;

prev->_next = newnode;

}

}//查詢

slistnode* slistfind(slistnode* phead, datatype x)

cur = cur->_next;

}return

null;

}//任意位置刪除

void slisterase(slistnode** pphead, slistnode* pos)

else

else

if (pos ==

null)

else

prev->_next = pos->_next;

free(pos);}}

}

test.c

//測試尾插

void testslistpushback()

//測試尾刪

void testslistpopback(slistnode** pphead)

//測試頭插

void testslistpushfront()

//測試頭刪

void testslistpopfront()

//測試查詢

void testslistfind()

//測試任意位置插入

void testslistinsest()

//測試任意位置刪除

void testslisterase(slistnode** pphead, slistnode* pos)

G藥(鍊錶的增 刪 查詢)

題目描述 新年伊始,飛神得到了乙個叫做藥的鍊錶 弱已詞窮 初始時鍊錶只有頭指標,對鍊錶存在三種操作。增加乙個元素,向鍊錶中增加乙個元素,增加後要保證鍊錶從前到後為單調不降序列。刪除乙個元素,從鍊錶中刪除乙個元素,刪除後要保證剩餘節點仍為單調不降序列。按序將鍊錶中的元素全部輸出。輸入 多組輸入。對於每...

雙向鍊錶的增刪

雙向鍊錶在刪除節點時不需要找到要刪除節點的前乙個結點,這是比較好的,但是增刪都要同時處理前後兩個指標的問題,package singlelinkedlist 實現雙鏈表的增刪改查功能 public class twolinkedlistdemo 定義節點 class node override pu...

mysql增刪改查鍊錶 鍊錶的增刪改查

include include 先定義鍊錶裡面的元素。typedef struct nodemynode 定義整個鍊錶。typedef struct linkmylink int isempty to mylink mylink mylink 判斷鍊錶是否為空。int push to mylinki...