指針:
聲明時,A *a表示a是指向A類型的指針,A &a表示a是A類型的引用;
調用時,*a表示取a指向的內容,&a表示取a的地址。
一、建表
順序表建表
單鏈表(帶頭結點)建表
尾插法:(從尾部開始建表)
頭插法:
真題舉例:
鍵盤輸入n個英文字母,輸入格式爲n、c1、c2……、cn,其中n表示字母的個數。請編程以這些輸入數據建立一個單鏈表,並要求將字母不重複的存入鏈表;
題目解讀:
輸入一個單詞,掃描其在鏈表中是否出現,如果出現,就什麼都不做;否則,根據這個單詞構造結點插入鏈表中。
代碼實現:
void createLinkNoSameElem(LNode *&head){
head = (LNode*)malloc(sizeof(LNode));
head->next = NULL;
LNode *p;
int n;
char ch;
std::cin>>n;
for(int i = 0; i< n; ++i){
std::cin>>ch;
p = head->next;
while (p !=NULL) {
if (p->data == ch)
break;
p =p->next;
}
if(p == NULL){
p=(LNode*)malloc(sizeof(LNode));
p->data =ch;
p->next =head-next;
head-next=p;
}
}
}
二、逆置
順序表逆置操作
線性表逆置操作就是把線性表順序完全顛倒,如下圖所示:
逆置前:
逆置後:
上述過程實現代碼:
鏈表逆置操作
逆置前:
逆置後:
上述過程實現代碼:
其中t->next=q->next是因爲下圖:
經典例題:
1.將一個長度爲n的數組的前端k(k<n)個元素 逆序後移動到數組後端,要求原數組中數據不丟失。
移動後變成:
實現代碼:
2.將一個長度爲n的數組的前端k(k<n)個元素 保持原序移動到數組後端,要求原數組中數據不丟失。
移動後變成:
實現代碼:
調用兩次上方的reverse函數即可。
3.
先把0-p的元素逆置,然後把p-n-1的元素逆置,最後再把整個表逆置。
實現代碼: