线性表系列(二)-单向链表的全面解析

来源:互联网 发布:英语专四作文 人工智能 编辑:程序博客网 时间:2024/06/09 12:59

单向链表,相对于顺序表的优点:删除和查找速度快,只需改变指针指向,无需移动元素

 

主要实现功能:1,初始化链表

                             2,查找

                             3,插入

                             4,删除

                             5,逆序

 

链表的节点结构:

typedef struct LNode {int data;int length;       //链表的长度struct LNode *next;}*LinkList;


链表的这几个功能实现都很简单,不做过多概述,就是指针控制能力问题,以下代码仅供参考学习,可运行

#include<iostream>#include<stdio.h>#include<string>using namespace std;typedef struct LNode {int data;int length;       //链表的长度struct LNode *next;}*LinkList;//初始化链表void CreateList(LinkList &L,int n){LNode *p,*q;L=(LinkList )malloc(sizeof(LNode));L ->next = NULL;L->length=0;q=L;int length=0;for(int i=n;i>0;--i){p=(LNode *)malloc(sizeof(LNode));cin>>p->data;p->next=q->next;q->next=p;q=p;L->length++;}}//获取第i位置的元素的值int GetElem(LinkList L,int i){LNode *p;p=L;if(i<1||i>=L->length+1)return 0;while(i--)p=p->next;return p->data;}//在位置i插入元素eint InsertList(LinkList &L,int i,int e){LNode *p;p=L;if(i<1||i>L->length+1){cout<<"超过链表长度"<<endl;return 0;}i--;while(i--)p=p->next;LNode *s=(LNode *)malloc(sizeof(LNode));s->data=e;s->next=NULL;s->next=p->next;p->next=s;L->length++;cout<<L->length<<endl;return 1;  //插入成功}//删除链表的第i个元素int DeleteList(LinkList &L,int i){LNode *p=L;if(i<1||i>L->length){cout<<"超过链表的长度"<<endl;return 0;   //删除失败}i--;while(i--)p=p->next;LNode *q;q=p->next;p->next=q->next;L->length--;return 1;}//打印链表void PrintList(const LinkList L){LNode *p;p=L->next;for(int i=0;i<L->length;i++)if(p){cout<<p->data<<" ";p=p->next;}cout<<endl;}//实现链表逆序,在不断链的情况下void Inverse(LinkList &L){LNode *p,*q,*A;p=L->next;A=L;while(p){q=p->next;p->next=A;A=p;//保存当前节点p=q;}L->next->next=NULL;L->next=A;}//释放链表void FreeList(LinkList &L){LNode *p,*q;p=L;while(p->next!=NULL){q=p->next;free(p);p=q;}}int main(){LinkList L;int n;cout<<"输入初始链表的长度"<<endl;cin>>n;CreateList(L,n);Inverse(L);//逆序一下链表PrintList(L);cout<<"输入删除第几位"<<endl;cin>>n;DeleteList(L,n);PrintList(L);cout<<"输入插入到第几位和插入的数值"<<endl;int k;cin>>n>>k;InsertList(L,n,k);PrintList(L);cout<<"输入查找第几个元素"<<endl;cin>>n;cout<<GetElem(L,n)<<endl;FreeList(L);return 0;}


注:main()函数好多可以自己定义

原创粉丝点击