由代碼知道,題主使用的是單向鏈表,即上一節(jié)點指向下一節(jié)點,下一節(jié)點只指向下下一節(jié)點。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、濟(jì)水街道網(wǎng)絡(luò)推廣、小程序定制開發(fā)、濟(jì)水街道網(wǎng)絡(luò)營銷、濟(jì)水街道企業(yè)策劃、濟(jì)水街道品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供濟(jì)水街道建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
如果不要尾節(jié)點也是可以的,首先解釋為什么可以,不要尾節(jié)點之后要怎么做:
不要尾節(jié)點,通過頭節(jié)點也是可以達(dá)到尾部的。但是如果需要在鏈表尾部加入數(shù)據(jù),就需要從頭開始遍歷鏈表來達(dá)到尾部,然后再做上面代碼中的操作把新節(jié)點放到尾部。這個是可以的,但是從一個設(shè)計者的角度來說,如果鏈表過長,比如10W+,那么每次遍歷開銷很大的,而如果記錄了尾節(jié)點就不需要每次都遍歷,只需操作尾節(jié)點。
如果不要頭節(jié)點行嗎,顯然是不可以的,因為尾部沒有指向上一節(jié)點的指針,會找不到頭,那么鏈表就只能訪問一個尾節(jié)點并且造成內(nèi)存泄露,如下圖,節(jié)點方向示意圖,試著去掉head或者tail標(biāo)識,你會更快明白的。
head-----------------------------tail
【】-【】-........-【】-【】
廣義表定義:第一個元素為表頭,其余元素組成的表(重點是元素組成的 “表”)
head((a,b),(c,d))=(a,b)==取表頭第一個元素;
tail(head((a,b),(c,d)))即tail(a,b)==(b),根據(jù)廣義表表尾定義為(b),不是b.
如理解的不對請指出。
以第5題為例啊
tail(L) 得到的是(a,(u,t,w))
tail(tail(L)) 得到的就是((u,t,w))
head(tail(tail(L)))得到的就是(u,t,w)
tail(getHead(tail(tail(L))))得到的就是((t,w))
head(tail(head(tail(tail(L)))))得到的就是(t,w)
head(head(tail(head(tail(tail(L))))))得到的就是t.
#include?stdio.h
#include?string.h
#include?ctype.h
int?count_word(const?char?*?sentense,?const?char?*?word,?int?caseless)
{
int?number?=?0;
const?char?*?p,?*?current?=?sentense;
int?head,?tail;
int?len?=?strlen(sentense);
//printf("len:%d\n",?len);
while?(1)?{
//printf("c:?%s\n",?current);
if?(caseless)
p?=?strcasestr(current,?word);
else
p?=?strstr(current,?word);
if?(p?==?NULL)
break;
//?check?if?it's?a?word
head?=?p?-?sentense;
tail?=?head?+?strlen(word);
//printf("p:?%s\n",?p);
//printf("head:?%d\n",?head);
//printf("tail:?%d\n",?tail);
if?(?(head?==?0?||?!isalpha(sentense[head-1]))?
(tail?==?len?||?!isalpha(sentense[tail])))?{
number++;
//printf("??????num++\n");
}
current?=?p?+?strlen(word);
}
return?number;
}
int?main()
{
int?n?=?count_word("It's?a?nice?day?today,?isn't?it??.?leave?it?alone!?got?it",?"it",?1);
printf("%d\n",?n);
return?0;
}