PTA:C课程设计(6)

简介: PTA:C课程设计(6)

函数题


6-6-1 求单链表的表长

实现一个函数,求带头结点的单链表的表长

接口:


int Length ( LinkList L );

其中LinkList结构定义如下:

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;


实现:

int Length ( LinkList L )
{
    int n = 0;
    LinkList cur = L;
    while(cur->next)
    {
        cur = cur->next;
        n++;
    }
    return n;
}


6-6-2 求单链表元素序号

接口:

int Locate ( LinkList L, ElemType e);

L是带头结点的单链表的头指针,e是要查找的元素值。如果e在单链表中存在,函数Locate返回其序号(序号从1开始);否则,返回0。

int Locate ( LinkList L, ElemType e)
{
    int n = 1;
    LinkList cur = L->next;
    while(cur)
    {
        if(cur->data == e)
            return n;
        n++;
        cur = cur->next;
    }
    return 0;
}


6-6-3 求单链表结点的阶乘和

本题要求实现一个函数,求单链表L结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int范围内。

接口:

int FactorialSum( List L );

其中单链表List的定义如下:

typedef struct Node *PtrToNode;
struct Node {
    int Data; /* 存储结点数据 */
    PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */


实现:

int factorial(int data)
{
    if (data == 0)
        return 1;
    else
    {
        int ret = data;
        while (--data)
        {
            ret *= data;
        }
        return ret;
    }
}
int FactorialSum( List L )
{
    if(L==NULL)
        return 0;
    int ret = 0;
    List cur = L;
    while(cur)
    {
        ret += factorial(cur->Data);
        cur = cur->Next;
    }
    return ret;
}


6-6-4 逆序数据建立链表

实现一个函数,按输入数据的逆序建立一个链表。

接口:

struct ListNode *createlist();

函数createlist利用scanf从输入中获取一系列正整数,当读到−1时表示输入结束。按输入数据的逆序建立一个链表,并返回链表头指针。链表节点结构定义如下:

struct ListNode {
    int data;
    struct ListNode *next;
};


可以直接头插,这里为了多写一个反转链表,特意搞了尾插再反转

实现:

struct ListNode* reverseList(struct ListNode* head)
{
    struct ListNode* newhead = NULL, * cur = head;
    while (cur)
    {
        struct ListNode* next = cur->next;
        cur->next = newhead;
        newhead = cur;
        cur = next;
    }
    return newhead;
}
struct ListNode* BuySLTNode(int x)
{
    struct ListNode* newnode = (struct ListNode*)malloc(sizeof(struct ListNode));
    if (newnode == NULL)
    {
        perror("malloc fail");
        return;
    }
    newnode->data = x;
    newnode->next = NULL;
    return newnode;
}
void SLTPushBack(struct ListNode** pphead, int x)
{
    struct ListNode* newnode = BuySLTNode(x);
    if (*pphead == NULL)
    {
        *pphead = newnode;
    }
    else
    {
        struct ListNode* tail = *pphead;
        while (tail->next != NULL)
        {
            tail = tail->next;
        }
        tail->next = newnode;
    }
}
struct ListNode* createlist()
{
    struct ListNode* head = NULL;
    int n = 0;
    while (1)
    {
        scanf("%d", &n);
        if (n == -1)
            break;
        SLTPushBack(&head, n);
    }
    struct ListNode* ret = reverseList(head);
    return ret;
}


编程题


6-7-1 单链表的创建及遍历


#include<stdio.h>
#include<stdlib.h>
typedef struct ListNode
{
    int data;
    struct ListNode* next;
}ListNode;
ListNode* BuySLTNode(int x)
{
    ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
    if (newnode == NULL)
    {
        perror("malloc fail");
        return;
    }
    newnode->data = x;
    newnode->next = NULL;
    return newnode;
}
void SLTPushBack(ListNode** pphead, int x)
{
    ListNode* newnode = BuySLTNode(x);
    if (*pphead == NULL)
    {
        *pphead = newnode;
    }
    else
    {
        ListNode* tail = *pphead;
        while (tail->next != NULL)
        {
            tail = tail->next;
        }
        tail->next = newnode;
    }
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    if(n == 0)
        return 0;
    ListNode* head = NULL;
    while (n--)
    {
        int c = 0;
        scanf("%d", &c);
        SLTPushBack(&head, c);
    }
    ListNode* cur = head;
    printf("%d", cur->data);
    cur = cur->next;
    while (cur)
    {
        printf(" %d", cur->data);
        cur = cur->next;
    }
    return 0;
}
相关文章
|
7月前
|
C++
【PTA】​L1-079 天梯赛的善良​ (C++)
【PTA】​L1-079 天梯赛的善良​ (C++)
109 0
【PTA】​L1-079 天梯赛的善良​ (C++)
|
测试技术 C++
【PTA天梯赛】L1-001 L1-002 L1-003 L-004 L-005 L-006 L-007 L-008 L-009 L1-010 c++
【PTA天梯赛】L1-001 L1-002 L1-003 L-004 L-005 L-006 L-007 L-008 L-009 L1-010 c++
221 1
ACM刷题之路(二十一)大素数筛选 2019暑期集训 POJ 2689 Prime Distance
ACM刷题之路(二十一)大素数筛选 2019暑期集训 POJ 2689 Prime Distance
|
存储
PTA:C课程设计(7)
PTA:C课程设计(7)
135 0
|
存储 人工智能
PTA:C课程设计(3)
PTA:C课程设计(3)
162 0
|
存储
PTA:C课程设计(5)
PTA:C课程设计(5)
109 0
PTA:C课程设计(2)
PTA:C课程设计(2)
121 0
PTA:C课程设计(4)
PTA:C课程设计(4)
66 0
PTA:C课程设计(1)
PTA:C课程设计(1)
166 0
|
机器学习/深度学习 人工智能 JavaScript