【考研】数据结构———单链表

获取元素:

Status GetElem(LinkList L,int i,ElemType *e)

{    

    int j;

    LinkList p;                //定义链表,p是个指向一个结点的指针 

    p=L->next;                // 让P指向链表L的第一个结点 

    j=1;                    //当前位置计数器初始化为1 

    

    while( p && j<i)        //p不能为空(p为空就是null,即链表的尾部)j<i表示未找到 

    {

        p=p->next;    

        ++j;

    }

    if( !p || j>i )            //1.如果到链表的结束还没有找到,则p=null,!p为真,所以返回error    

    {

        return ERROR;

    }

    *e = p->data;

    return OK;  

}

插入数据:

//思路:

//1.声明结点p指向链表的第一个结点,初始化j=1 

//2. 当j<i时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加1

//3.若链表末尾p为空,则说明第i个元素不存在;

//4.否则查找成功。在系统中生成一个空节点s; 

//5.将数据e赋值给s->data; 

//6.标准语句: s->next=p->next;p-next=s;

    

Status ListInsert(LinkList *L ,int i ,ElemType e)

{

    int j;

    LinkList p,s;

    

    p=L->next;

    j=1;

    

    while( p && j<i )                //用于寻找第i个结点 

    {

        p=p->next;

        j++;

    }

    

    if( !p || j>i )

    {

        return ERROR;

    }

    

    s=(LinkList)malloc(sizeof(Node));        //动态分配空间,定义一个名为Nod的LinkList指针变量 

    s->data=e;

    

    s->next=p->next;

    p-next=s;

    

    return OK;

}


 

删除数据: 

//思路:

//1.声明结点p指向链表的第一个结点,初始化j=1 

//2. 当j<i时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加1

//3.若链表末尾p为空,则说明第i个元素不存在;

//4.否则查找成功。将想要删除的结点删除 p->next=p->next->next;

//5.将q结点中的数据赋给e,作为返回;

//6.释放结点q 

Status ListDelete(LinkList *L,int i,ElemType *e)

{

    int j=0;

    LinkList p,q;

    

    p=*L;

    j=1;

    

    while(p->next && j<i)

    {

        p=p->next;

        ++j;

    }

    if( !(p->next)|| j>i )

    {

        return ERROR; 

    }

    

    q=p->next;

    p->next=q->next;

    

    *e = q->data;

    free(q)

    

    return OK;

}

头插法:

//单链表整表的创建

//思路:

//1.声明一结点p和计数变量i;

//2.初始化空链表L;

//3.让L头结点的指针指向null,即建立一个带头结点的单链表

//4.循环实现后继结点的赋值和插入 

//头插法: 就是将新结点插入到当前链表的表头上,直到结束为止

//简单的说,就是把新加进的元素放在表头后的第一个位置:先让新结点的next指向头结点之后,然后让表头的next指向新结点

void CreateListHead(LinkList &L,int n)

{

    LinkList p;

    int i;

    

    srand(time(0));

    

    *L = (LinkList) malloc(sizeof(Node));

    (*L)->next=NULL;· 

    

    for(i=0;i<n;i++)

    {

        p = (LinkList)malloc(sizeof(Node));

        p->data = rand()%100+1;

        p->next = (*L)->next;

        (*L)->next = p;

    }

    

} 

尾插法:

单链表整表的创建

//思路:

//1.声明一结点p和计数变量i;

//2.初始化空链表L;

//3.让L头结点的指针指向null,即建立一个带头结点的单链表

//4.循环实现后继结点的赋值和插入 

//尾插法: 在链表的尾部增加新的结点 

void CreateListTail(LinkList *L,int n)

{

    LinkList p,r;

    int i;

    

    srand(time(0));

    *L = (LinkList) malloc(sizeof(Node));

    r=*L;

    

    for(i=0;i<n;i++)

        {

        p = (Node *)malloc(sizeof(Node));

        p->data = rand()%100+1;

        r->next = p;

        r = p;

        } 

        

        r->next= null;

}

 

数据结构1800题1. 算法的计算量的大小称为计算的( )。【北京邮电大学2000 二、3 (20/8分)】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于( )【中科院计算所 1998 二、1 (2分)】 A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2) 这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 【南京理工大学 1999 一、1(2分) 【武汉交通科技大学 1996 一、1( 4分)】 4.一个算法应该是( )。【中山大学 1998 二、1(2分)】 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 5. 下面关于算法说法错误的是( )【南京理工大学 2000 一、1(1.5分)】 A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是( )【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为( )两大类。【武汉交通科技大学 1996 一 、4(2分)】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值