結構演算法 002 單鏈表的頭插法和尾插法
阿新 • • 發佈:2019-01-04
單鏈表的頭插法和尾插法
學習的時候自己拿張白紙畫圖,學的很快
實在不行看視訊,嚴蔚敏的(視訊昏黃,感覺很難受,但是很經典。慕課上也有)
建立單鏈表的方法
- 頭插法
- 尾插法
廢話少說看程式碼
#include <iostream>
using namespace std;
typedef int elemtype;
typedef struct LNode
{
elemtype data;
LNode *next;
}LNode,*LinkList;
//頭插法,程式碼簡單,但是輸入順序和連結串列順序相反。。
LNode * CreListHead() //表示函式最後返回指標
{
LNode *head,*s;
head=new LNode;
head->next=NULL;
int x=0;
cin>>x;
while(x!=999)
{
s=new LNode;
s->data=x;
s->next=head->next;
head->next=s;
cin>>x;
}
return head;
}
LinkList CreListTail() //表示函式最後返回指標
{
//head表示頭結點指標,s表示建立新節點的指標,r始終表示隊尾指標
LinkList head,s,r; //等價於 LNode * head,*s,*r ;
head=new LNode;
head->data=1111;
head->next=NULL;
r=head;
int x=0;
cin>>x;
while (x!=999)
{
s=new LNode;
s->data=x;
r->next=s->next; //意思是把原來隊尾節點的指標域(空指標NULL)賦給新隊尾節點的指標域。
r->next=s;
r=s;
cin>>x;
}
return head;
}
int HeadInsertDemo()
{
//下面是頭插法的效果演示
LNode *p=CreListHead();
cout<<"因為使用頭插法,所以依次輸入1、2、3,連結串列順序從左到右是3、2、1"<<endl;
//因為使用頭插法,所以依次輸入1、2、3,連結串列順序從左到右是3、2、1
cout<<p->data<<endl; //頭結點沒有賦值,所以是一個隨機數
cout<<p->next->data<<endl; //節點的第一個元素,也就是你輸入的 最後 一個元素
cout<<p->next->next->data<<endl; //節點的第二個元素,也就是你輸入的 倒數 第二個元素
}
int TailInsertDemo()
{
//下面是尾插法的效果演示
LinkList p=CreListTail();
cout<<"**********"<<endl;
cout<<p->data<<endl; //頭結點我給了它一個值”1111“,所以返回值是1111
cout<<"**********"<<endl;
cout<<"The first node is "<<p->next->data<<endl; //理論上是你輸入的第一個元素
cout<<"The second node is "<<p->next->next->data<<endl; //理論上是你輸入的第二個元素
}
int main()
{
HeadInsertDemo();
cout<<"======================"<<endl;
TailInsertDemo();
}