数据结构学习---线性表链表实现

来源:互联网 发布:淘宝韩版女装图片 编辑:程序博客网 时间:2024/04/27 23:31

链表的实现(简易版)


首先是结构体

typedef int ElementType; //为了便于修改链表中元素的类型typedef struct Node{ElementType Date;struct Node* Next;}List;List L,*Ptrl;


求链表长度的函数

int length(List *Ptrl){List* p =Ptrl;int j=0;while(p){p=p->Next;j++;}return j;}

通过位置查找

List* FindKth(int k,List *Ptrl){List *p=Ptrl;int i=0;while(p!=NULL && i<k){ p=p->Next;i++;}if(i == k) return p;else return NULL;}


通过值查找


List* Find(ElementType X ,List* Ptrl){List* p =Ptrl;while(p!=NULL && p->Date!=X){p=p->Next;}return p;}

插入

/*构造节点,找到i-1个节点,插入节点*/List* Insert(ElementType X,int i ,List* Ptrl){     List* s, * p;    if(i==1){        s=(List*)malloc(sizeof(List));        s->Date = X;        s->Next = Ptrl;        return s;    }    p = FindKth(i-1,Ptrl);    if(p== NULL){        cout<<"参数错"<<endl;        return NULL;    }    else{        s=(List*)malloc(sizeof(List));        s->Date = X;        s->Next = p->Next;//位置不能颠倒        p->Next = s;        return Ptrl;    }}


删除

List* Delete(int i,List* Ptrl){List *p, *s;if(i==1){ //删除头结点s=Ptrl;if(Ptrl!=NULL)Ptrl=Ptrl->Next;else return NULL;free(s); //不要忘了释放空间return Ptrl;}p = FindKth(i-1,Ptrl);if(p== NULL){printf("第%d个节点不存在",i-1); return NULL;}else if(p->Next == NULL){printf("第%d个节点不存在",i); return NULL;}else{s=p->Next;//用新创建的指针指向要删除的p->Next = s->Next; free(s);return Ptrl;}}


【测试的主函数】

int main(){List* p=(List*)malloc(sizeof(List));p->Next = NULL;p->Date=2;p=Insert(5,1,p);p=Insert(3,2,p);p=Insert(5,2,p);cout<<"长度为:  "<<length(p)<<endl;List* po = FindKth(2,p);if(po==NULL)cout<<"不存在"<<endl;else{cout<<po->Date<<endl;}p=Delete(2,p);po = FindKth(2,p);if(po==NULL)cout<<"不存在"<<endl;else{cout<<po->Date<<endl;}return 0;}


1 0
原创粉丝点击