一、鍊錶的定義
鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元(可以是連續的,也可以是不連續的)存放資料元素。
鍊錶中每乙個元素成為「結點」,每乙個結點都是由資料域和指標域組成的,每個結點中的指標域指向下乙個結點。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...
鍊錶的常見操作
鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。以下簡單實現了鍊錶的一些操作,包括建立 增加節點 刪除節點 單鏈表逆置 合併有序鍊錶等。一 鍊錶建立 鍊錶主要有三種形式,包括單鏈表 雙鏈表和迴圈鍊錶。單鏈表每個節點只包含乙個後驅指標,雙鏈表節點同時包含乙個前驅指標和乙個...
鍊錶的常見操作
鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。以下簡單實現了鍊錶的一些操作,包括建立 增加節點 刪除節點 單鏈表逆置 合併有序鍊錶等。一 鍊錶建立 鍊錶主要有三種形式,包括單鏈表 雙鏈表和迴圈鍊錶。單鏈表每個節點只包含乙個後驅指標,雙鏈表節點同時包含乙個前驅指標和乙個...