데이터 구조 제2 장 선형 표 - 교과서 코드

24893 단어
1. 선형 표 의 순서 저장
#include

using namespace std;
typedef int ElemType;
typedef int Status;

//      
typedef struct{
    int n;      //            
    int maxLength;  //      
    ElemType *element; //       
}SeqList;

//   
Status Init(SeqList *L,int mSize){
    L->n=0;
    L->maxLength=mSize;
    L->element=(ElemType *)malloc(sizeof(ElemType)*mSize);  //          
    if(!L->element)
        return 0;
    return 1;
}

//  ai  (   i  )
Status Find(SeqList L,int i,ElemType *x){
    if(i<0||i>L.n-1)
        return 0;
    *x=L.element[i];    //  x       
    return 1;
}

//  ,      i+1,  x
Status Insert(SeqList *L,int i,ElemType x){
    if(i1||i>L->n-1)        //    
        return 0;
    if(L->n==L->maxLength)  //    
        return 0;
    for(int j=L->n-1;j>i;j--)
        L->element[j+1]=L->element[j];
    L->element[i+1]=x;
    L->n=L->n+1;
    return 1;
}

//  ,   ai  
Status Delete(SeqList *L,int i){
    if(i<0||i>L->n-1)
        return 0;
    if(!L->n)           //    
        return 0;
    for(int j=i+1;j<=L->n;j++)
        L->element[j-1]=L->element[j];
    L->n--;
    return 1;
}

//  
Status Output(SeqList L){
    if(!L.n)
        return 0;
    for(int j=0;j<=L.n-1;j++)
        cout<" ";
    cout<return 1;
}

//    
void Destroy(SeqList *L){
    L->maxLength=0;
    L->n=0;
    free(L->element);
}

int main(){
    int i;
    SeqList list;
    Init(&list,10);
    for(i=0;i<9;i++)
        Insert(&list,i-1,i);    //   ai+1     i
    Output(list);
    Delete(&list,0);
    Output(list);
    Destroy(&list);
    return 0;
}

2. 선형 표 의 체인 저장 소
#include<iostream>
using namespace std;
typedef int ElemType;
typedef int Status;
//      ,       
typedef struct node{
    ElemType element;
    struct node *link;
}node;

//     
typedef struct{
    node *first;  //   ,         
    int n;          //        
}SingleList;

//   
Status Init(SingleList *L){
    L->n=0;
    L->first=NULL;
    return 1;
}

//  ,  ai
Status Find(SingleList L,int i,ElemType *x){
    node *p;
    if(i<0||i>L.n-1)
        return 0;

    p=L.first;
    for(int j=0;j<i;j++)
        p=p->link;
    *x=p->element;      //    x      
    return 1;
}

//  ,     i+1,    x
Status Insert(SingleList *L,int i,ElemType x){
    node *p,*q;
    if(i1||i>L->n-1)
        return 0;
    p=L->first;
    for(int j=0;j<i;j++) p=p->link;     //p           ,p  ai
    q=(node *)malloc(sizeof(node ));    //    q
    q->element=x;

    if(i>-1){                   //        
        q->link=p->link;
        p->link=q;
    }
    else{
        q->link=L->first;       //         ,       
        L->first=q;
    }
    L->n++;
    return 1;
}

//      ,    ai
Status Delete(SingleList *L,int i){
    node *p,*q;
    if(!L->n)
        return 0;
    if(i<0||i>L->n-1)
        return 0;

    p=L->first;
    q=L->first;
    for(int j=0;j<i-1;j++)
        q=q->link;        //q          

    if(i==0){              //        
        L->first=L->first->link;
    }
    else{
        p=q->link;      //p     
        q->link=p->link;
    }
    free(p);    //    p     
    L->n--;
    return 1;
}

//      
Status Output(SingleList L){
    node *p;
    if(!L.n)
        return 0;
    p=L.first;
    while(p){
        cout<<p->element<<" ";
        p=p->link;
    }
    cout<<endl;
    return 1;
}

//      ,           
Status Destory(SingleList *L){
    node *p;        //p                   ,      
    while(L->first){
        p=L->first->link;
        free(L->first);
        L->first=p;
    }
    return 1;
}

int main(){
    int i,x;
    SingleList list;
    Init(&list);
    for(i=0;i<9;i++)
        Insert(&list,i-1,i);
    cout<<"The linklist is: "<<endl;
    Output(list);
    Delete(&list,0);
    cout<<"The linklist is: "<<endl;
    Output(list);
    Find(list,0,&x);
    cout<<"The value is: "<<endl;
    cout<<x<<endl;
    Destory(&list);
    return 0;
}

3. 시계 머리 를 가 진 더 블 링크 는 머리 를 대표 하 는 더 블 링크 를 쓸 때 취소 할 때 까지 잘못 썼 고 나중에 수정 합 니 다.
/*       
       ,           ,              ,
      ,              */
#include<iostream>
using namespace std;
typedef int Status;
typedef int ElemType;
typedef struct node{
    ElemType element; //   
    struct node *link; //   
}node;

typedef struct{
    struct node *head;
    int n;      //       
}HeaderList;

//                      
Status Init(HeaderList *list){
    list->head=(node *)malloc(sizeof(node));
    if(!list->head)
        return 0;
    list->n=0;
    list->head->link=NULL;
    return 1;
}

//    , ai+1     x
Status Insert(HeaderList *list,int i,ElemType x){
    if(i1||i>list->n-1){
        return 0;
    }
    node *p,*q;
    p=list->head;
    for(int j=0;j<=i;j++) p=p->link;

    q=(node *)malloc(sizeof(node));
    q->element=x;
    q->link=p->link;
    //p           ,q       
    p->link=q;
    list->n++;
    return 1;
}

//    ,  ai.p          ,q     
Status Delete(HeaderList *list,int i){
    node *p,*q;
    if(!list->n)
        return 0;
    if(i<0||i>list->n-1)
        return 0;

    p=list->head;
    for(int j=0;j<i;j++) p=p->link;
    q=p->link;
    p->link=q->link;
    free(q);
    list->n--;
    return 1;
}

//  
Status Output(HeaderList list){
    node *p;
    p=list.head->link;
    while(p){
        cout<<p->element;
        p=p->link;
    }
    cout<<endl;
    return 1;
}

//  ai,  x    
Status Find(HeaderList list,int i,ElemType *x){
    if(i<0||i>list.n-1)
        return 0;
    node *p;
    p=list.head;
    for(int j=0;j<=i;j++) p=p->link;
    *x=p->element;
    return 1;
}

////    ,    
//Status Destroy(HeaderList *list){
//    node *p=list->head;
//    while(p){
//        p=list->head->link;
//        free(list->head);
//        list->head=p;
//    }
//    return 1;
//}

int main(){
    int i,x;
    HeaderList list;
    Init(&list);
    for(i=0;i<9;i++){
        Insert(&list,i-1,i);
    }
    cout<<"the headlist is:";

    Output(list);
    Delete(&list,0);
    cout<<"the headlist is:";
    Output(list);

    Find(list,0,&x);
    cout<<"the value is:";
    cout<<x<<endl;

//    Destroy(&list);
    return 0;
}

좋은 웹페이지 즐겨찾기