数据结构学习笔记(二) 链表之单链表的基本操作

来源:互联网 发布:常用的数据分析模型 编辑:程序博客网 时间:2024/06/07 06:11

以下是一些单链表的基本操作方法,包括单链表的创建、增加或删除元素,查找某一个元素以及反转单链表。

#include<iostream>using namespace std;//抽象数据类型typedef int datatype;typedef struct node{    datatype data;    struct node *next;}ListNode,*LinkList;//单链表的创建void Create(LinkList &head,int i){        datatype x;        ListNode *p,*q;        q=head=NULL;        cout<<"请输入5个数:"<<endl;        while(i--)        {            p=new ListNode;            cin>>x;            p->data=x;            p->next=NULL;            if(head==NULL)                head=p;            if(q!=NULL)                q->next=p;            q=p;        }}//查找链表第i个结点地址ListNode* Locate(LinkList head,int i){    //参数检查    if(i<0)        return NULL;    ListNode* p;    p=head;    while(i--)        p=p->next;    return p;}//单链表的插入void Insert(LinkList &head,int i,datatype x){    //参数检查    if(i<0)    {        cout<<"插入位置不合法!"<<endl;        return;    }    if(i>5)    {        cout<<"插入位置超过链表尾端,默认插入在表尾!"<<endl;        i=5;    }    ListNode *p,*q;    q=head;    if(i==0)    {        p=new ListNode;        p->data=x;        p->next=head;        head=p;    }    else    {        i--;        while(i--)            q=q->next;        p=new ListNode;        p->data=x;        p->next=q->next;        q->next=p;    }}//单链表的删除void Delete(LinkList &head,int i){    //参数检查    if(i<0||i>5)    {        cout<<"删除的位置不合法!"<<endl;        return;    }    ListNode *p,*q;    p=q=head;    if(i==0)        head=q->next;    else    {        i--;        while(i--)            p=p->next;        q=p->next;        p->next=q->next;    }    delete q;}//单链表的反转void Reverse(LinkList &head,int i){    ListNode *p,*r;    r=NULL;    while(head!=NULL)    {        p=head;        head=p->next;        p->next=r;        r=p;    }    head=p;}//打印单链表void Print(LinkList &head,int i){    //参数检查    if(head==NULL)    {        cout<<"链表为空!"<<endl;        return;    }    ListNode *p;    p=head;    cout<<"链表中的元素为:"<<endl;    while(i--)    {        cout<<p->data<<" ";        p=p->next;    }    cout<<endl;}//测试函数int main(){    LinkList head;    ListNode *n;    int i;    datatype x;    Create(head,5);    Print(head,5);    cout<<"输入要查找的结点编号:"<<endl;    cin>>i;    n=Locate(head,i-    cout<<n->data<<endl;    cout<<"输入要插入的结点编号以及对应的值:"<<endl;    cin>>i>>x;    Insert(head,i-1,x);    Print(head,6);    cout<<"输入`````的结点编号:"<<endl;    cin>>i;    Delete(head,i-1);    Print(head,5);    cout<<"单链表反转:"<<endl;    Reverse(head,5);    Print(head,5);    return 0;}
阅读全文
0 0
原创粉丝点击