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元素,指定位置插入元素函数,删除指定位置元素,需注意一下是哪一个。

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
  • 2700

inflate

/* ID: daniel.20 LANG: JAVA TASK: inflate */ import java.io.*; import java.util.*; public c...
  • dyhu083
  • dyhu083
  • 2011年10月04日 12:26
  • 117

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

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

浙大PAT全套答案_1001至1049.

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

浙大PTA OJ漏洞

对PTA测试网站高危漏洞可以导致任意用户代码曝光的测试报告, 1.打开PTA提交列表,进行抓包: 发现使用Ajax获取了提交列表,查看有getSubmitList项: http://pt...
  • InsZVA
  • InsZVA
  • 2015年09月22日 22:09
  • 4503

PTA 基础编程题目集 函数题 4-1~4-13

4-1//水题无难点 void PrintN(int N) { int i; for(i=1;i printf("%d\n",i); } 4-2//水题无难点 double ...
  • hys0124
  • hys0124
  • 2017年04月10日 21:44
  • 705

PTA数据结构与算法题目集(中文)4-5 链式表操作集 (20分)

本题要求实现链式表的操作集。 函数接口定义: Position Find( List L, ElementType X ); List Insert( List L, ElementType ...
  • cuideman
  • cuideman
  • 2016年12月08日 21:26
  • 750

pta基础编程题目集 编程题

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

PTA练习题.高考状元

#include #include using namespace std; class student { double yuwen;//语文 double math;//数学 double...
  • he__yuan
  • he__yuan
  • 2017年06月26日 20:31
  • 128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PTA数据结构与算法题目集(中文) 函数题 (1)
举报原因:
原因补充:

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