單鏈表的簡單面試題

2021-07-13 10:11:46 字數 4057 閱讀 8154

#define _crt_secure_no_warnings 1

#include "slistnode.h"

void test1()//pushback popback

void test2()//pushfront popfront find

else }

void test3()//erase

void test4()//bubblingsort erasenothead reverselish insertfrontnode

int main()

#ifndef __slistnode_h__

#define __slistnode_h__

#pragma once //能夠保證標頭檔案只被編譯一次

#include #include #include typedef int datatype;

typedef struct slistnode

slistnode,*pslistnode;

// 初始化單鏈表(對於無頭結點單鏈表,該函式沒有意義)

void initlist(pslistnode* phead);

// 銷毀單鏈表

void destroylist(pslistnode* phead);

// 尾插

void pushback(pslistnode* phead, datatype data);

// 尾出

void popback(pslistnode* phead);

// 頭插

void pushfront(pslistnode* phead, datatype data);

// 頭出

void popfront(pslistnode* phead);

// 在鍊錶中查詢元素data

pslistnode find(pslistnode* phead, datatype data);

// 刪除pos位置的結點(注意不能用那種替換形式)

void erase(pslistnode* phead, pslistnode pos);

// 在鍊錶的pos位置插入元素data

void insert(pslistnode* phead, pslistnode pos, datatype data);

//列印鍊錶存放的資料

void printlist(pslistnode* phead);

//寫乙個單鏈表的氣泡排序

void bubblingsort(pslistnode* phead);

//刪除乙個無頭鍊錶的非尾結點

void erasenothead(pslistnode pos);

//反轉(逆置)鍊錶

void reverselish(pslistnode* phead);

//(無頭單鏈表)在當前節點前插入乙個節點

void insertfrontnode(pslistnode pos,datatype data);

//只遍歷一遍,查詢鍊錶的中間結點

pslistnode findmidnode(pslistnode* phead);

//刪除倒數第k個結點(k>1 && k《總長度)

void delknode(pslistnode* phead,int k);

#endif//__slistnode_h__

#define _crt_secure_no_warnings 1

#include "slistnode.h"

//這裡參的是二級指標,因為要對結構體指標的內容進行修改,所以必須傳該指標的位址(即

//乙個二級指標),一級指標相當於值傳遞,不會對實參有改變

void initlist(pslistnode* phead)

pslistnode byenode(datatype data)

else

return pnewnode;

}void printlist(pslistnode* phead)

else

printf("\n"); }}

void pushback(pslistnode* phead, datatype data)

else

pnewnode = byenode(data);

pnode->_nextnode = pnewnode;

pnewnode->_nextnode = null; }}

void popback(pslistnode* phead)

else if (pnode1->_nextnode == null) //當只剩下乙個節點的情況下,要單獨處理頭指標

else

pnode2->_nextnode = null;//保證鍊錶最後乙個節點的的_nextnode為空

free(pnode1);//和malloc配套使用 釋放最後乙個節點

pnode1 = null;//將釋放掉的結點賦值為空,以防變成空指標 }}

void pushfront(pslistnode* phead, datatype data)

else }

void popfront(pslistnode* phead)

else if ((*phead)->_nextnode == null)

else }

pslistnode find(pslistnode* phead, datatype data)

else

}return null;

}void erase(pslistnode* phead, pslistnode pos)

else if(pnode == pos)

else

}}void insert(pslistnode* phead, pslistnode pos, datatype data)

else if(pnode == pos)

else

}}void destroylist(pslistnode* phead)

*phead = null;

}void bubblingsort(pslistnode* phead)

cur = cur->_nextnode;

} prev = cur;

cur = *phead; }}

void erasenothead(pslistnode pos)

pos->data = pos->_nextnode->data;

del = pos->_nextnode;

pos->_nextnode = pos->_nextnode->_nextnode;

free(del);

del = null;

}void reverselish(pslistnode* phead)

(*phead)->_nextnode = newphead;

}void insertfrontnode(pslistnode pos,datatype data)

pnewnode = byenode(data);

tmp = pnewnode->data;

pnewnode->data = pos->data;

pos->data = tmp;

pnewnode->_nextnode = pos->_nextnode;

pos->_nextnode = pnewnode;

}pslistnode findmidnode(pslistnode* phead)

return cur;

}void delknode(pslistnode* phead,int k)

while (cur->_nextnode != null)

del = prev->_nextnode;

prev->_nextnode = prev->_nextnode->_nextnode;

free(del);

del = null;

}

簡單面試題

1.short s1 1 s1 s1 1 有錯嗎?short s1 1 s1 1 有錯嗎?答 對於short s1 1 s1 s1 1 由於1是int型別,因此s1 1運算結果也是int 型,需要強制轉換型別才能賦值給short型。而short s1 1 s1 1 可以正確編譯,因為s1 1 相當於...

java簡單面試題

1 和 的區別是什麼?是預編譯處理,是字串替換。mybatis在處理 時,會將sql中的 替換為?號,呼叫preparedstatement的set方法來賦值 mybatis在處理 時,就是把 替換成變數的值。使用 可以有效的防止sql注入,提高系統安全性。2 當實體類中的屬性名和表中的欄位名不一樣...

python簡單面試題(2)

首先搭建環境,然後根據專案搭建自動化框架,編寫自動化用例,整理用例,自動生成測試報告,然後整合到jenkins上進行操作 出現anr和crash進行復現抓取日誌 adb命令 編寫自動化用例的時候斷言編寫清楚,然後也可以通過用例失敗後進行截圖進行儲存,方便我們後續檢視用例失敗原因,自動化用例失敗後,進...