單鏈表的運算
假設線性表中結點的數據類型是字符
(
① 算法思路
從一個空表開始
具體方法
注意
該方法生成的鏈表的結點次序與輸入順序相反
② 具體算法實現
LinkList CreatListF(void)
{//返回單鏈表的頭指針
char ch;
LinkList head;//頭指針
ListNode *s; //工作指針
head=NULL; //鏈表開始為空
ch=getchar(); //讀入第
while(ch!=
s=(ListNode *)malloc(sizeof(ListNode));//生成新結點
s
s
head=s;
ch=getchar(); //讀入下一字符
}
return head;
}
(
① 算法思路
從一個空表開始
具體方法
注意
⒈采用尾插法建表
⒉必須增加一個尾指針r
② 具體算法實現
LinkList CreatListR(void)
{//返回單鏈表的頭指針
char ch;
LinkList head;//頭指針
ListNode *s
head=NULL; //鏈表開始為空
r=NULL;//尾指針初值為空
ch=getchar(); //讀入第
while(ch!=
s=(ListNode *)malloc(sizeof(ListNode));//生成新結點
s
if (head!=NULL)
head=s;//新結點插入空表
else
r
r=s;//尾指針指向新表尾
ch=getchar(); //讀入下一字符
}//endwhile
if (r!=NULL)
r
return head;
}
注意
⒈開始結點插入的特殊處理
由於開始結點的位置是存放在頭指針(指針變量)中
⒉空表和非空表的不同處理
若讀入的第一個字符就是結束標志符
(
①頭結點及作用
頭結點是在鏈表的開始結點之前附加一個結點
⒈由於開始結點的位置被存放在頭結點的指針域中
⒉無論鏈表是否為空
②帶頭結點的單鏈表
注意
頭結點數據域的陰影表示該部分不存儲信息
③尾插法建帶頭結點鏈表算法
LinkList CreatListR
{//用尾插法建立帶頭結點的單鏈表
char ch;
LinkList head=(ListNode *)malloc(sizeof(ListNode));//生成頭結點
ListNode *s
r=head; // 尾指針初值也指向頭結點
while((ch=getchar())!=
s=(ListNode *)malloc(sizeof(ListNode));//生成新結點
s
r
r=s;
}
r
return head;
}
注意
上述算法裡
(
以上三個算法的時間復雜度均為
From:http://tw.wingwit.com/Article/program/sjjg/201311/23278.html