DataStructure-用指針實現List

具體實現代碼:

#include<stdio.h>
#include<malloc.h>
typedef int ListItem;
typedef struct node *link;//定義節點類型
typedef struct node{
    ListItem element;//節點存儲的元素
    link next;//直接下一個元素的指針
} Node;

typedef struct Ilist *List;
typedef struct Ilist//定義表結構
{
    link first;
} Llist;

link NewNode(){//新建一個節點類型
    link p;
    if((p=malloc(sizeof(Node)))==0) printf("exhausted memory\n");
    else return p;
}

List ListInit(){//初始化一個表
    List L=malloc(sizeof *L);//分配內存
    L->first=0;
    return L;
}

int LIstEmpty(List L){//判斷表是否爲空,
    return L->first==0;
}

int ListLength(List L){//返回數組的長度
    int len=0;
    link p;
    p=L->first;
    while(p){
        len++;
        p=p->next;

    }
    return len;
}

ListItem ListRetrieve(int k,List L){//list中第K位置的元素
    int i;
    link p;
    if(k<1) printf("out of bounds\n");
    p=L->first;
    i=1;
    while(i<k&&p){
        p=p->next;
        i++;
    }
    return p->element;
}

int ListLocate(ListItem x,List L){//元素x在list中的位置
    int i;
    link p;
    p=L->first;
    while(p && p->element != x){
        p=p->next;
        i++;
    }
    return p ? i : 0;
}

void ListInsert(int k,ListItem x,List L){//在list的第K處插入元素x
    link p,y;
    int i;
    if(k<0) printf("out of bounds\n");
    p=L->first;
    for(i=1;i<k&&p;i++) 
        {p=p->next;}
    y=NewNode();
               y->element=x;

               if(k){
                y->next=p->next;
                p->next=y;
               }
               else{
                y->next=L->first;
                L->first=y;
               }
}

ListItem ListDelete(int k,List L){//刪除list重第K個元素
    ListItem x;
    link p,q;
    int i;
    if(k<1||!L->first) printf("out of bounds\n");
    p=L->first;
    if(k==1) L->first=p->next;
    else{
        q=L->first;
        for(i=1;i<k-1&&q;i++) q=q->next;
            p=q->next;
                  q->next=p->next;

        x=p->element;
        free(p);
        return x;
    }
}

void printList(List L){//打印list中的所有的元素
    link p;
    for(p=L->first;p;p=p->next)
        printf("%d\n",p->element );
}
void main(){
    List L=ListInit();
    ListInsert(0,0,L);
    ListInsert(0,2,L);
    ListInsert(1,1,L);
    printList(L);
    printf("list is LIstEmpty? -> %d\n",LIstEmpty(L) );
    printf("list length is-> %d\n",ListLength(L));
    printf("list %d item is ->%d\n",2,ListRetrieve(2,L) );
    printf("list item %d in ->%d\n",2,ListLocate(2,L) );
    ListDelete(2,L);
    printList(L);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章