数据结构-实验一 单链表

实验一 单链表

  • 实验要求

        输入数据(设为整型)建立单链表,并求相邻两节点data值之和为最大的第一节点

  • 实验结果

        

(一)程序代码

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

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

void IntiList(LinkList &L)
{
    L = (LinkList)malloc(sizeof(struct LNode));
    if (!L)
        exit(1);
    L->next = NULL;
}

void CreatList(LinkList &L)
{
    LNode * p = NULL;
    p = L;

    printf("请输入一组整数(以0为结束符,数之间回车):");
    int a;
    do{
        scanf("%d", &a);
        if (!a) break;
        LNode * s = (LNode *)malloc(sizeof(struct LNode));
        s->data = a;
        s->next = NULL;
        p->next = s;
        p = p->next;

    }while (a != 0);
}

void ListTraverse(LinkList L)
{
    LNode * p = L->next;
    while (p)
    {
        printf("%d", p->data);
        printf(" ");
        p = p->next;
    }
    printf("\n");
}

void adjmax(LinkList L)
{
    LNode * p = NULL;
    p = L->next;

    int maxsum = -1e-9;
    LNode *q = NULL;
    while (p->next)
    {
        if (p->data + p->next->data > maxsum)
        {
            maxsum = p->data + p->next->data;
            q = p;
        }
        p = p->next;
    }
    printf("第一个节点的data值为:%d\n", q->data);
}

void DestroyList(LinkList &L)
{
    LNode * p = NULL;
    p = L->next;

    while(p)
    {
        L->next = p->next;
        free(p);
        p = L->next;
    }
    free(L);
}

int main()
{
    LinkList L;
    int reply;

    IntiList(L);

    do{
        CreatList(L);
        ListTraverse(L);
        adjmax(L);

        printf("是否继续输入下一组数据:是:1,否:0\n");
        scanf("%d", &reply);
    }while (reply == 1);

    DestroyList(L);
    return 0;
}

(二)实现样例

    ### 数据结构实验单链表的实现方法与示例代码 #### 单链表简介 单链表种常见的线性数据结构,其中每个节点包含两部分:存储的数据项以及指向下个节点的指针。这种结构允许动态分配内存来保存任意数量的元素。 #### 改进后的单链表设计思路 为了克服传统单链表长时间使用后可能出现大量堆空间碎片化的问题,在“单链表”的内部增加了片预留的空间,所有的`Node`对象都在这片空间中动态创建和销毁[^1]。此改进有助于减少因频繁增删操作而产生的内存碎片,从而提高程序性能。 #### Python中的单链表实现 下面是个简单的Python版本单链表类定义及其基本功能: ```python class Node: def __init__(self, data=None): self.data = data # 节点储存的数据 self.next = None # 下节点链接 class SingleLinkedList: def __init__(self): self.head = None def append(self, new_data): newNode = Node(new_data) if not self.head: self.head = newNode else: last_node = self.head while last_node.next: last_node = last_node.next last_node.next = newNode def display(self): current_node = self.head while current_node is not None: print(current_node.data,end=" -> ") current_node = current_node.next print("None") # 创建并测试单链表实例 linked_list = SingleLinkedList() elements_to_add = ['a', 'b', 'c'] for element in elements_to_add: linked_list.append(element) linked_list.display() # 输出 a -> b -> c -> None ``` 上述代码展示了如何构建个具有追加新节点(`append`)和遍历显示所有节点(`display`)能力的基础版单向链表。通过这种方式可以有效地管理系列相互关联的对象,并支持高效的插入/移除操作。
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值