2015年考研核心考点命题思路解密——数据结构 第二章 线性表 考点3 线性表的链式存储(综合题部分)

考点3 线性表的链式存储

二.综合应用题部分

1.        设h是无头结点的单链表。下列程序的功能是,如果线性表h的长度不小于2,则将首元结点删除并插入到表尾。请在空格处填上适当的语句,使算法完整。

    typedef struct node

        {

            elementype data;

            struct node *next;

        } node, *linklist;

    void change(linklist &h)

        {

            linklist p,q;

            if ( h&&h->next) {

            q=h;

            h=________________;

            p=h;

            while(p->next)__________;

            ___________________;

            ___________________;

          }

       }

 

2.        函数实现单链表的删除算法,请在空格处将算法补充完整。

int ListDelete(LinkList L, int i, ElemType *s){

        LNode*p,*q;

        intj;

        p=L;j=0;

        while((           )&&(j<i-1))

            {

                p=p->next;j++;

            }

         if (p->next==NULL||j>i-1) returnERROR;

         q=p->next;                 

                          ;

        *s=q->data;

        free (q);

        return OK;

}/*listDelete*/

 

3.        阅读下面程序:

LinkList mynote(LinkList L)

       {//L是不带头结点的单链表的头指针

          if(L&&L->next)

{

                 q=L;L=L->next;p=L;

     S1:        while(p->next) p=p->next;

     S2:        p->next=q;q->next=NULL;

              }

             return  L;

       }

    请回答下列问题:

(1).   说明语句S1的功能;

(2).   说明语句组S2的功能;

(3).   设链表表示的线性表为(a1,a2, …,an),写出算法执行后的返回值所表示的线性表。

 

4.        下面程序段的功能是利用从尾部插入的方法建立单链表的算法,请在下划线处填上正确的内容。

typedef struct node {

int data;

struct node *next;

} lklist;

void lklistcreate(_____________ *&head )

{

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

{

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

scanf(“%d”,&(p->data));

p->next=0;

if (i==1)  head=q=p;

else {

q->next=p;

____________;

}

}

}

 

5.        设有一个带表头结点的双向链表L,其数据类型为DblList,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次Locate(L, x)操作时,令元素值为x的结点的访问频度freq加1,并将该结点前移,链接到与它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。函数中有些语句缺失,请将它们补上。

DblList Locate (DblList L, Type x) {         //定位

 

          DblNode *p = first->next ;

          while ( p != first &&__________) p = p->next;

          if ( p != first ) {                                  //链表中存在x

                            ;                          //该结点的访问频度加1

                current = p;                             //从链表中摘下这个结点

                current->prior->next= current->next;

               current->next->prior = current->prior;

          p = current->prior;                      //寻找从新插入的位置

                while ( p != first&&­­­­­­­­­ ­­­­­____________)

              p = p->prior;

                current->next=____________;       //插入在p之后

          current->prior = p;

          current->next->prior = current;

          p->next =_________________;

        }

         else cout<<"Sorry. Not find!\n";             //没找到

}

 

6.        已知线性表采用链式存储结构,结点类型定义如下,试编写一个算法,在带头结点的单链表L中,删除所有值为x的结点。

typedefstruct LNode

{

Elemtype  data;

 Struct LNode *next;

}LNode,*Linklist;


更多资料,请访问我的个人主页:www.kaoyanlianmeng.com

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值