PTA数据结构与算法题目集(中文) 函数题 (1)

原创 2015年11月27日 14:22:59

4-1 单链表逆转

code:

List Reverse(List head)
{
    if(NULL==head|| NULL==head->Next)
        return head;
    List p;
    List q;
    List r;
    p = head;
    q = head->Next;
    head->Next = NULL;
    while(q){
        r = q->Next;
        q->Next = p;
        p = q;
        q = r;
    }
    head=p;
    return head;
}

P.S:就是一个反转链表,不是很难,耐心写就可以写完了

4-2 顺序表操作集

code:


Position Find( List L, ElementType X )
{
    List r = L;
    while(r!=NULL && X!=r->Data)
    {
        r = r->Next;
    }
    if( r && X==r->Data)
        return r;
    else
        return ERROR;
}
List Insert( List L, ElementType X, Position P )
{
    if(L==NULL)
    {
        if(P!=L) {
            printf("Wrong Position for Insertion");
            return ERROR;
        } else {
            L = (List)malloc(sizeof(struct LNode));
            L->Data = X;
            L->Next = NULL;
            return L;
        }
    } else {
        List r = L, s = NULL;
        while(r != P && r)
        {
            s = r;
            r = r->Next;
        }
        if(r==P)
        {
            List p = (List)malloc(sizeof(struct LNode));
            p->Data = X;
            if(s)
            {
                p->Next = r;
                s->Next = p;
            } else {
                p->Next = L;
                L = p;
            }
                return L;
        } else {
            printf("Wrong Position for Insertion\n");
            return ERROR;
        }
    }
}
List Delete( List L, Position P )
{
    List r = L;
    List pre = NULL;
    while(r && r!=P)
    {
        pre = r;
        r = r->Next;
    }
    if(r==P)
    {
        if(L == P)
        {
            L = L->Next;
            free(r);
        } else {
            pre->Next = P->Next;
            free(P);
            List k = pre->Next;
        }
        return L;
    }
    printf("Wrong Position for Deletion\n");
    return ERROR;
}

P.S:这一题吧,做了蛮久的,也不是很难,但是有一个地方卡了很久,不过好像不记得哪了,囧~!总之,需要注意一些地方,看清楚题目中给的结点结构体。

4-3 求链式表的表长

code

int Length( List L )
{
    int len = 0;
    List p = L;
    while(p)
    {
        len++;
        p = p->Next;
    }
    return len;
} 

P.S:这道就相当简单了,一个函数求链表长度,将链表便利一遍,然后一个数加就行了,最后返回长度

4-4 链式表的按序号查找

code:

ElementType FindKth( List L, int K )
{
    List p = L;
    if(K<1)
        return ERROR;
    int i=1;
    while(p && i<K)
    {
        p = p->Next;
        i++;
    }
    if(i==K && p!=NULL)
        return p->Data;
    else
        return ERROR;
}

P.S:这道函数题是需要写一个函数来找到并返回链式表的第K个元素,需要注意的就是这个第k个。

4-5 链式表操作集

code:

Position Find( List L, ElementType X )
{
    List r = L;
    while(r!=NULL && X!=r->Data)
    {
        r = r->Next;
    }
    if( r && X==r->Data)
        return r;
    else
        return ERROR;
}
List Insert( List L, ElementType X, Position P )
{
    if(L==NULL)
    {
        if(P!=L) {
            printf("Wrong Position for Insertion");
            return ERROR;
        } else {
            L = (List)malloc(sizeof(struct LNode));
            L->Data = X;
            L->Next = NULL;
            return L;
        }
    } else {
        List r = L, s = NULL;
        while(r != P && r)
        {
            s = r;
            r = r->Next;
        }
        if(r==P)
        {
            List p = (List)malloc(sizeof(struct LNode));
            p->Data = X;
            if(s)
            {
                p->Next = r;
                s->Next = p;
            } else {
                p->Next = L;
                L = p;
            }
                return L;
        } else {
            printf("Wrong Position for Insertion\n");
            return ERROR;
        }
    }
}
List Delete( List L, Position P )
{
    List r = L;
    List pre = NULL;
    while(r && r!=P)
    {
        pre = r;
        r = r->Next;
    }
    if(r==P)
    {
        if(L == P)
        {
            L = L->Next;
            free(r);
        } else {
            pre->Next = P->Next;
            free(P);
            List k = pre->Next;
        }
        return L;
    }
    printf("Wrong Position for Deletion\n");
    return ERROR;
}

这一题的代码的确开始粘过来的时候少了几行代码,现在已经更正了
—————————————————————–

P.S:我只想说这道题难过,一开始做的时候,按照本能的想法将Position当int整型数表示位置,可是很后来才发现它是一个指针类型,真的调了好久T_T,也就另一方面说明了一定要看清楚题目中的东西,链表的操作集合,相信学过数`据结构的应该都能写吧,自己慢慢写,总能通过的。这道题包括3个函数,找到X元素,指定位置插入元素函数,删除指定位置元素,需注意一下是哪一个。

pta基础编程题目集 编程题

题目链接5-7 12-24小时制#include int main(int argc, const char * argv[]) { int hour,minute; scanf("%...
  • bobo1356
  • bobo1356
  • 2017-03-29 18:33:47
  • 4436

pat全套答案

  • 2014年03月02日 21:54
  • 2.32MB
  • 下载

PTA 基础编程题目集 -函数12题

 4-1 简单输出整数   (10分) void PrintN(int N) { int i,sum=0; for(i=1; i
  • acmmiao
  • acmmiao
  • 2016-05-08 21:46:06
  • 3488

浙大PAT全套答案_1001至1049.

  • 2013年04月13日 20:01
  • 2.71MB
  • 下载

PAT乙级解题报告目录

源码地址:https://github.com/liuchuo/PAT 乙级 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题 1002. 写出这个数...
  • liuchuo
  • liuchuo
  • 2016-07-24 17:48:50
  • 3897

图的遍历(PTA题目解答)

mycode: #include #include #include using namespace std; void dfs(vector> a,int i,vector &test,v...
  • wxd_zswx
  • wxd_zswx
  • 2015-09-07 21:52:54
  • 453

PTA-数据结构-自测-1

这篇博客是对PTA(https://pta.patest.cn/)上起步能力自测题第1题的总结啦~
  • ZHN2016
  • ZHN2016
  • 2017-04-17 18:36:53
  • 177

inflate

/* ID: daniel.20 LANG: JAVA TASK: inflate */ import java.io.*; import java.util.*; public c...
  • dyhu083
  • dyhu083
  • 2011-10-04 12:26:01
  • 139

PTA数据结构与算法题目集(中文)4-10 二分查找 (20分)

本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List Tbl, ElementType K ); 其中List结构定义如下: typed...
  • cuideman
  • cuideman
  • 2016-12-10 22:31:27
  • 1561

PTA数据结构与算法题目集(中文)4-1 单链表逆转 (20分)

本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNod...
  • cuideman
  • cuideman
  • 2016-12-08 20:03:59
  • 1004
收藏助手
不良信息举报
您举报文章:PTA数据结构与算法题目集(中文) 函数题 (1)
举报原因:
原因补充:

(最多只允许输入30个字)