日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性表的表示和实现方式之链式表示和实现

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性表的表示和实现方式之链式表示和实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?最近收拾東西,偶然發現大學時候的課本數據結構在亂叢當中,上大學時候看的比較多的一本。一陣感慨之后,果斷重新翻看了兩眼。看完線性表表這一章突發奇想想在實現一下鏈表。經過整整1天半的時間才就有了此文,主要是C++連怎么聲明類都不記得了,囧。下面代碼部分C++實現的線性表的鏈式表示和實現。C#是實現的靜態鏈表。本人水平有限,如果有不恰當之處,望大家多多指點。口下留情。

線性表:

  是最常用且是最簡單的一種數據結構。簡言之,一個線性表是N個數據元素的有限序列。線性表有兩種表現和實現方式。線性表的順序表示和實現線性表的鏈式表示和實現。線性表屬于線性結構,線性結構有一下特點。

  • 存在惟一的一個被稱作做"第一個"的數據元素。
  • 存在惟一的一個被稱做"最后一個"的數據元素。
  • 除了第一個之外,集合中每一個數據元素均有一個前驅。
  • 除最后一個外,集合中每個數據元素均有一個后繼。?

  ?別不多說,先上代碼:

? ? ?定義一個類LinkList,表示節點信息,這個是該類的.h文件。

//節點信息#pragma once /*** *鏈表的節點, *有節點的數據和下一個節點的地址 *一個默認的構造函數和一個重載的構造函數 *一個析構函數 **/ class LinkList { public:int data;LinkList* next; LinkList(void); LinkList(int m_data,LinkList *m_next);~LinkList(void); };

  下面是LinkList類的內容,只是頭文件中聲明函數的空實現:

#include "LinkList.h" #include <iostream> LinkList::LinkList(void) { }LinkList::LinkList(int m_data,LinkList *m_next) { }LinkList::~LinkList(void) { }

  下面定義一個類LinkOperate,用來對LinkList對象進行操作:LinkOperate的頭文件為:

#include "LinkList.h" #pragma once class LinkOperate { public://默認的構造函數LinkOperate(void);//插入數據LinkList* insertList(LinkList*myLinkList, int data);//刪除第一個給定的值LinkList* deleteListNode(LinkList*myLinkList, int data);//查找指定的值void searchList(LinkList*myLinkList, int data);//默認的析構函數~LinkOperate(void); };

  LinkOperate類的.cpp文件如下:

#include "LinkList.h" #include "LinkOperate.h" #include <iostream> using namespace std; LinkList* LinkOperate::insertList(LinkList* myLinkList, int data){LinkList* T = myLinkList; LinkList* p; while(T->next != NULL){T = T->next;}p = (LinkList * ) malloc(sizeof(LinkList));p->data = data;p->next = NULL;myLinkList->data ++;cout<<"插入值為:"<<data<<"地址為:"<<p<<endl;T->next = p;return myLinkList; } void LinkOperate::searchList(LinkList* myLinkList, int data) {LinkList* P = myLinkList->next;while(P->data!=data&&P->next){P=P->next;}if(P->data == data){cout<<"找到了值:"<<data<<"地址為:"<<P<<endl; return;}cout<<"不存在值:"<<data<<endl;} LinkList* LinkOperate::deleteListNode(LinkList* myLinkList, int data) {LinkList* P = myLinkList;LinkList* Q = P->next;while(Q->data!=data&&Q->next){P= P->next;Q= Q->next;}if(Q->data == data){P->next->next = Q->next;myLinkList->data --;return myLinkList;}cout<<"不存在值:"<<data<<endl;return myLinkList; } LinkOperate::LinkOperate(void) { } LinkOperate::~LinkOperate(void) { }

   單向鏈表在刪除元素的時候要記兩個值,如?LinkList* P = myLinkList; LinkList* Q = P->next;如果是雙向鏈表的話就不要求了。

? ? ? ? 準備完畢之后是檢查結果的時候了,一下是對以上部分的測試:

#include<iostream> #include "LinkList.h" #include "LinkOperate.h"using namespace std; int main(){int n = 0;LinkList myLinkList = LinkList(1,NULL);LinkOperate operateLink;myLinkList.data = 0;myLinkList.next = NULL;while(n < 40){ operateLink.insertList(&myLinkList,n);n++;} operateLink.searchList(&myLinkList,50); operateLink.deleteListNode(&myLinkList,39);cout<<"刪除的結果為:"<<endl;while(myLinkList.next){cout<<myLinkList.data<<endl;myLinkList = *myLinkList.next;}system("pause");}

 ?

源代碼下載:http://files.cnblogs.com/fantiantian/linkedlist.rar

源代碼中包含C#實現的靜態鏈表,靜態鏈表的相關內容會在下一篇中體現。

環境VS2010

轉載于:https://www.cnblogs.com/fantiantian/archive/2012/06/08/2541483.html

總結

以上是生活随笔為你收集整理的线性表的表示和实现方式之链式表示和实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。