日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

2.数据结构笔记学习--线性表基本操作

發(fā)布時間:2023/12/10 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.数据结构笔记学习--线性表基本操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 線性表的結(jié)構(gòu)定義:
    • 順序表的結(jié)構(gòu)定義: typedef struct {int data[maxSize]; //存放順序表元素的數(shù)組,一般用 int A[maxSize];int length; //存放順序表的長度,一般用 int n; }SeqList;

      ?

    • 單鏈表結(jié)點定義: typedef struct LNode {int data; //存放結(jié)點的數(shù)據(jù)域struct LNode *next; //指向后繼結(jié)點的指針 }LNode;

      ?

    • 雙鏈表結(jié)點定義: typedef struct DLNode {int data; //存放結(jié)點的數(shù)據(jù)域struct DLNode *prior; //指向前驅(qū)結(jié)點的指針struct DLNode *next; //指向后繼結(jié)點的指針 }DLNode;

      ?

  • 順序表的算法操作:
    • 按元素值的查找算法: int LocateElem (SeqList L, int e) {int i;for(i=1; i<=L.Length; i++)if(e=L.data[i])return i;return 0; }

      ?

    • 插入數(shù)據(jù)元素的算法: //在p的位置插入新的元素e int insert(SeqList &L, int p, int e) //為啥用&L {int i;if(p<1 || p>L.length+1 || L.length>maxSize-1) //范圍不正確return 0;for(i=L.length; i>=p; --i) // 依次后移L.data[i+1] = L.data[i];++(L.length);return 1; }

      ?

    • 初始化順序表: //初始化順序表 void InitList(SeqList &L) {L.length = 0; }

      ?

    • 求指定位置元素: //e返回L中p的元素 int GetElem (SeqList L, int p,int &e) //e用引用類型 {if(p<1||p>L.length)return 0;e = L.data[p];return 1; }

      ?

  • 單鏈表的算法操作:
    • 尾插法: //n個元素存儲在數(shù)組a中,尾插法建立鏈表C void CreatelistR(LNode *&C, int a[], int n) //要改變的變量用引用型 {LNode *s, *r; //s指向新申請的結(jié)點,r指向C的終端結(jié)點int i;C = (LNode *)malloc(sizeof(LNode)); //申請C的頭結(jié)點空間C->next =NULL;r=C; //此時的終端結(jié)點就是頭結(jié)點for(i=1; i<=n; ++i) //為啥++i,不是i++ {s = (LNode* )malloc(sizeof(LNode));s->data = a[i];//用新結(jié)點接收a的一個元素r->next = s; //r接納新結(jié)點r = r->next;//r指向終端結(jié)點,以便接納下一個結(jié)點 }r->next = NULL; }
    • 頭插法: //n個元素存儲在數(shù)組a中,頭插法建立鏈表C void CreatelistF(LNode *&C, int a[], int n) //要改變的變量用引用型 {LNode *s; int i;C = (LNode *)malloc(sizeof(LNode)); //申請C的頭結(jié)點空間C->next =NULL;for(i=1; i<=n; ++i) //為啥++i,不是i++ {s = (LNode* )malloc(sizeof(LNode));s->data = a[i];//用新結(jié)點接收a的一個元素s->next = C->next; //s所指向的指針域next指向C的開始結(jié)點C->next = s;//頭結(jié)點的指針域next指向s結(jié)點,s成為新的開始結(jié)點 } }
  • 雙鏈表的算法操作:
    • 尾插法建立雙鏈表 //尾插法建立雙鏈表 void CreateDlistR(DLNode *&L, int a[], int n) {DLNode *s,*r;int i;L = (DLNode*)malloc(sizeof(DLNode));L->next = NULL;r=L; // r始終指向終端結(jié)點,開始頭結(jié)點也是尾結(jié)點for(i=1; i<=n; i++){s = (DLNode*)malloc(sizeof(DLNode));s->data = a[i];//將s插入到L的尾部,并且r指向s,這一部分是主要記憶代碼r->next = s;s->prior = r;r = s;}r->next = NULL;}
    • 查找結(jié)點算法: DLNode* searchNode(DLNode *C, int x) {DLNode *p = C->next;while(p!= NULL){if(p->data == x)break;p = p->next;}return p; }
    • 插入結(jié)點的算法 s->next = p->next; s->prior = p; p->next = s; s->next->prior = s; //假如p指向最后一個結(jié)點,本行可去
    • 刪除結(jié)點的算法: q = p->next; p->next = q->next; q->next->prior = p; free(q);

?

轉(zhuǎn)載于:https://www.cnblogs.com/frl520/p/9408476.html

總結(jié)

以上是生活随笔為你收集整理的2.数据结构笔记学习--线性表基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。