C 鍊錶操作總結和常見鍊錶操作

2021-07-27 11:38:37 字數 3988 閱讀 4692

一、鍊錶的定義

鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元(可以是連續的,也可以是不連續的)存放資料元素。

鍊錶中每乙個元素成為「結點」,每乙個結點都是由資料域和指標域組成的,每個結點中的指標域指向下乙個結點。head是「頭指標」,表示鍊錶的開始,用來指向第乙個結點,而最後乙個指標的指標域為null(空位址),表示鍊錶的結束。

可以看出鍊錶結構必須利用指標才能實現,即乙個結點中必須包含乙個指標變數,用來存放下乙個結點的位址。

實際上,鍊錶中的每個結點可以用若干個資料和若干個指標。結點中只有乙個指標的鍊錶稱為單鏈表,這是最簡單的鍊錶結構。

再c++中實現乙個單鏈表結構比較簡單。

例如,可定義單鏈表結構的最簡單形式如下:

struct node

;這裡用到了結構體型別。其中,*next是指標域,用來指向該結點的下乙個結點;data是乙個整形變數,用來存放結點中的資料。當然,data可以是任何資料型別,包括結構體型別或類型別。

在此基礎上,我們在定義乙個鍊錶類list,其中包含鍊錶結點的插入,刪除,輸出等功能的成員函式。

下面簡單實現下結構體鍊錶,**如下:

#include using namespace std;

enum operation;//列舉型別,用於選單選擇結果

struct node //結點結構

; operation menu(); //選單函式

node * createlist( ); //建立鍊錶函式宣告

void printlist( node *); //輸出鍊錶中結點資訊函式宣告

node * insertnode(node *,node *); //在鍊錶中插入結點函式宣告

node * deletenode(node *,int); //在鍊錶中刪除結點函式宣告

node * deletelist(node *head); //刪除整個鍊錶

void create(); //對應操作選單--建立鍊錶的操作

void print( ); //對應操作選單--遍歷鍊錶的操作

void insert( ); //對應操作選單--插入鍊錶結點的操作

void delete( ); //對應操作選單--刪除鍊錶結點的操作

void deleteall(); //對應操作選單--刪除整個鍊錶的操作

int n=0; //全域性整型變數存放鍊錶中結點個數

node * head=null ; //全域性指標變數存放煉表頭結點位址-頭指標

int main()

p -> next = null ; //設定鍊錶尾部為空

delete s ; //釋放資料為0的結點

cout}while(p!=null) ;

else

else //原來的鍊錶不是空表

if(s->data<=p->data) //要插入的結點資料比最後乙個結點資料小

else //插到q指向的結點之後,p指向的結點之前

} else //要插入的結點資料比最後乙個結點資料還大

} n=n+1; //結點數加1

cout<<"成功完成乙個新結點插入..."next!=null) //p指向的不是所要找的結點且後面還有結點

//p後移乙個結點

if(deldata==p->data) //找到了要刪除的結點

delete p;

n--;

head=null;

} cout<<"整個鍊錶刪除成功!"<>choice;

return operation(choice);

}/*對應操作選單--建立鍊錶的操作*/

void create()

else

cout<>del_num; //輸入要刪除的結點的資料

head=deletenode(head,del_num); //刪除後鍊錶的頭位址

cout<<"是否繼續刪除結點? (繼續插入請按y或y,退出請按其它鍵)";

cin>>isgo;

}cout<

///日期:2014-11-03

//功能:單鏈表的定義與操作實現

/#pragma once

templatestruct node

;templateclass linklist

//析構函式、刪除空鍊錶

~linklist(void)

head = null;//頭結點指向空

}//建立具有n個元素的線性鍊錶

void createlist(int n)

}//在表中第i個位置插入元素

void insert(int i,t e)

if(!p || j>i-1)throw"位置異常";

else

}t delete(int i)//刪除表中第i個元素

if(!p->next || j>i-1)throw"位置異常";//刪除位置不合理

else //刪除位置合理

}//獲取第i個元素的值

t getelem(int i)

if(!p || j>i)

else //位置合理

}//在鍊錶中查詢值為e的元素

int locate(t e)

if(!p )//未找到,範圍0

else //找到,返回位序

}//返回元素e的前驅

t prior(t e)

if(p == head)

else if(!q)

else

}//測表空

int empty()

//測表長

int length()

return len; //返回表長

}//輸出表元素

void listdisplay()

}};/

//功能:單鏈錶類的測試

//// linklist_test.cpp : 定義控制台應用程式的入口點。

#include "stdafx.h"

#include "linklist.h"

#include "process.h"//exit()

#includeusing namespace std;

char pause;

typedef int t;

int _tmain(int argc, _tchar* argv)

{ int i;

t e,prior_e;

linklistl; //建立整形空鍊錶

system("cls"); //執行系統命令,清屏

int choice;do{

cout<<"1-建立鍊錶\n";

cout<<"2-在鍊錶第i個位置插入元素\n";

cout<<"3-刪除鍊錶中第i個位置的元素\n";

cout<<"4-返回第i個元素的值\n";

cout<<"5-元素定位\n";

cout<<"6-按值求前驅\n";

cout<<"7-測表空\n";

cout<<"8-測表長\n";

cout<<"9-顯示鍊錶\n";

cout<<"10-退出\n";

cout<<"enter choice:";

cin>>choice;

switch(choice)

{case 1://建立鍊錶

cout<<"請輸入要建立的鍊錶中元素的個數:";

cin>>i;

cout<>i;

cout<>e;

cout<>i;

cout<>i;

try{

e = l.getelem(i);

cout<<"第"<>e;

i = l.locate(e);

cout<<"查詢元素"<>e;

try{

prior_e = l.prior(e);

cout<<"元素"<

鍊錶的常見操作

include include includeusing namespace std typedef struct nodetype node typedef struct dnodetype dnode 建立單鏈表 node createlist node head node current he...

鍊錶的常見操作

鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。以下簡單實現了鍊錶的一些操作,包括建立 增加節點 刪除節點 單鏈表逆置 合併有序鍊錶等。一 鍊錶建立 鍊錶主要有三種形式,包括單鏈表 雙鏈表和迴圈鍊錶。單鏈表每個節點只包含乙個後驅指標,雙鏈表節點同時包含乙個前驅指標和乙個...

鍊錶的常見操作

鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。以下簡單實現了鍊錶的一些操作,包括建立 增加節點 刪除節點 單鏈表逆置 合併有序鍊錶等。一 鍊錶建立 鍊錶主要有三種形式,包括單鏈表 雙鏈表和迴圈鍊錶。單鏈表每個節點只包含乙個後驅指標,雙鏈表節點同時包含乙個前驅指標和乙個...