当前位置:编程学习 > C/C++ >>

线性表(链式存储)

顺序表包括两种存储方式:1.顺序存储,随机读取(顺序表).2.随机存储,顺序读取(链式表)  
[cpp] view plaincopy
//单链表的实现 
#include <iostream> 
#include <stdlib.h> 
using namespace std; 
typedef int ElemType; 
struct List 

    ElemType data; 
    List *next; 
}; 
void InitList(List *&HL)//初始化线性表 

    HL=NULL; 

void ClearList(List *&HL)//删除线性表 

    List *cp,*np; 
    cp=HL; 
    while(cp) 
    { 
        np=cp->next; 
        delete cp; 
        cp=np; 
    } 
    HL=NULL; 

int LengthList(List *HL)//得到单链表的长度 

    int i=0; 
    while(HL) 
    { 
        i++; 
        HL=HL->next; 
    } 
    return i; 

bool EmptyList(List *HL)//检测单链表是否为空 

    return HL==NULL; 

ElemType GetList(List *HL,int pos)//得到单链表中第pos个结点中的元素 

    if(pos<1) 
    { 
        cout<<"pos is invalid"<<endl; 
        exit(1); 
    } 
    int i=0; 
    while(HL) 
    { 
        i++; 
        if(i==pos) break; 
        HL=HL->next; 
    } 
    if(HL) 
        return HL->data; 
    else 
    { 
        cout<<"pos is out range"<<endl; 
        exit(1); 
    } 

void TraverseList(List *HL)//遍历单链表 

    while(HL) 
    { 
        cout<<HL->data<<" "; 
        HL=HL->next; 
    } 
    cout<<endl; 

bool FindList(List *HL,ElemType &item)//查找是否具有该元素 

    while(HL) 
    { 
        if(HL->data==item) 
        { 
            item=HL->data; 
            return true; 
        } 
        else HL=HL->next; 
    } 
    return false; 

bool UpdateList(List *HL,const ElemType &item)//更新某个元素 

    while(HL) 
    { 
        if(HL->data==item) break; 
        else HL=HL->next; 
    } 
    if(!HL) return false; 
    else 
    { 
        HL->data=item; 
        return true; 
    } 

bool InsertList(List *&HL,ElemType item,int pos)//插入一个元素 

    if(pos<-1) 
    { 
        cout<<"pos is invalid"<<endl; 
        return false; 
    } 
    List *newpt; 
    newpt=new List; 
    newpt->data=item; 
    List *cp=HL,*ap=NULL; 
    if(pos==0) 
    { 
        while(cp) 
        { 
            if(item<cp->data) break; 
            else 
            { 
                ap=cp; 
                cp=cp->next; 
            } 
        } 
    } 
    else if(pos==-1) 
    while(cp) 
    { 
        ap=cp; 
        cp=cp->next; 
    } 
    else 
    { 
        int i=0; 
        while(cp) 
        { 
            i++; 
            if(i==pos) break; 
            else 
            { 
                ap=cp; 
                cp=cp->next; 
            } 
        } 
        if(cp==NULL&&i+1<pos) 
        { 
            cout<<"pos is rang out"<<endl; 
            return false; 
        } 
    } 
    if(ap==NULL) 
    { 
        newpt->next=HL; 
        HL=newpt; 
    } 
    else 
    { 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,