生活随笔
收集整理的這篇文章主要介紹了
数据结构--线性表链式存储(链表)--单链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
定義:
單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。
鏈表中的數據是以節點來表示的,每個結點的構成:元素(?數據元素的映象) + 指針(指示后繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
鏈表特點:
根據線性表的長度動態的申請存儲空間,以解決順序存儲中存在的存儲空間難以確定的問題。
元素的要素:
指針:指向下一個元素。
值:當前元素儲存的數據。
#include<bits/stdc++.h>
using namespace std;
template <typename T>
struct Node //節點類
{T data;Node<T> *next; //此處<T>也可以省略
};
template <class T>
class LinkList
{Node<T> *first; // 單鏈表的頭指針 , <T>可以省略int length;
public:LinkList ( ){first=new Node<T>;first -> next= NULL ;length=0;}LinkList ( T a[ ], int n ) ;LinkList ( T a[ ], int n,int w) ;~LinkList ( ) ;int get_Len( ){return length;};T get_Loc ( int i ) ;int ser_Loc ( T x ) ;void ins_Loc ( int i, T x ) ;T del_Loc ( int i ) ;void print_List ( ) ;
};
template <class T>
LinkList<T>:: LinkList(T a[ ], int n)
{first=new Node<T>; //生成頭結點first->next=NULL;Node<T> *s;for (int i=0; i<n; i++){s=new Node<T>;s->data=a[i]; //為每個數組元素建立一個結點s->next=first->next;first->next=s;}length=n;
}
template <class T>
LinkList<T>:: LinkList(T a[ ], int n,int w) //w并無實際意義,用于區分頭插法于尾插法
{Node<T> *r,*s; //尾指針first=new Node<T>; //生成頭結點r=first;for (int i=0; i<n; i++){s=new Node<T>;s->data=a[i]; //為每個數組元素建立一個結點r->next=s;r=s; //插入到終端結點之后}r->next=NULL; //單鏈表建立完畢,將終端結點的指針域置空length=n;
}
template <class T>
void LinkList<T>:: print_List()
{Node<T> *p;p=first->next;while(p){cout<<p->data;p=p->next;}
}
template <class T>
T LinkList<T>::get_Loc(int i)
{Node<T> *p;int j;p=first->next;j=1; //或p=first; j=0;for(int j=0;p && j<i-1;j++){p=p->next; //工作指針p后移j++;}if (!p)throw "位置非法";elsereturn p->data;
}
template <class T>
void LinkList<T>::ins_Loc(int i, T x)
{Node<T> *p;int j;p=first ;j=0; //工作指針p初始化for(int j=0;p && j<i-1;j++){p=p->next; //工作指針p后移j++;}if (!p)throw "位置非法";else{Node<T> *s;s=new Node<T>;s->data=x; //向內存申請一個結點s,其數據域為xs->next=p->next; //將結點s插入到結點p之后p->next=s;}
}
template <class T>
T LinkList<T>::del_Loc(int i)
{Node<T> *p;p=first ; //工作指針p初始化for(int j=0;p && j<i-1;j++) //查找第i-1個結點{p=p->next;j++;}if (!p || !p->next)throw "位置非法"; //結點p不存在或結點p的后繼結點不存在else{Node<T> *q;T x;q=p->next;x=q->data; //暫存被刪結點p->next=q->next; //摘鏈delete q;return x;}
}
template <class T>
LinkList<T>:: ~LinkList()
{Node<T> *q;while (first){q=first->next;delete first;first=q;}length=0;
}
int main()
{//具體操作,不與給出
}
?
總結
以上是生活随笔為你收集整理的数据结构--线性表链式存储(链表)--单链表的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。