1. 程式人生 > >結構演算法 002 單鏈表的頭插法和尾插法

結構演算法 002 單鏈表的頭插法和尾插法

單鏈表的頭插法和尾插法

學習的時候自己拿張白紙畫圖,學的很快

實在不行看視訊,嚴蔚敏的(視訊昏黃,感覺很難受,但是很經典。慕課上也有)

建立單鏈表的方法

  1. 頭插法
  2. 尾插法

廢話少說看程式碼

#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(); }