• 线性存储(链表存储)


    //链表线性存储
    #include<iostream>
    using namespace std;
    class Date
    {
    public:
    int date;
    Date*next;
    };
    void show(Date*head); //显示函数
    Date*creat(); //链表创建
    int Length(Date*head); //长度函数
    Date*FindKth(Date*head, int k); //找第k个节点的数
    Date*find(Date*head, int m); //返回值为m的对象地址
    Date*insert(Date*head, int m, int k); //将m插入到第k个结点
    Date*Delete(Date*head, int k); //删除第k个结点
    int main()
    {
    Date*head = NULL, *p = NULL;
    head = creat();
    show(head);
    int l = Length(head);
    cout << "长度:" << l << endl;
    p = FindKth(head, 2);
    cout << ' ' << p->date << endl;
    head = insert(head, 34, 3);
    show(head);
    head = Delete(head, 3);
    show(head);
    return 0;
    }
    int Length(Date*head)
    {
    int i = 0;
    while (head)
    {
    i++;
    head = head->next;
    }
    return i;
    }
    Date*creat()
    {
    cout << "创建链表,以-1结束:" << endl;
    Date*p = new Date;
    cin >> p->date;
    Date*p1 = p, *head = p;
    while (1)
    {
    p1 = p;
    p = new Date;
    cin >> p->date;
    if (p->date == -1) //遇到-1退出
    {
    delete p;
    break;
    }
    p1->next = p;
    }
    p1->next = NULL;
    return head;
    }
    void show(Date*head)
    {
    Date *p = head;
    cout << "链表数据为:";
    while (p)
    {

    cout << p->date << " ";
    p = p->next;
    }
    cout << endl;
    }
    Date*FindKth(Date*head, int k)
    {
    int i = 1;
    Date*p = head;
    while (p&&i < k)
    {
    p = p->next;
    i++;
    }
    if (k == i)
    return p;
    else
    return NULL;
    }
    Date*find(Date*head, int m)
    {
    Date*p = head;
    while (p&&p->date != m)
    p = p->next;
    return p;
    }
    Date*insert(Date*head, int x, int k)
    {
    Date*p = new Date;
    Date*p1 = head, *l;
    p->date = x;
    int i;
    if (k == 1) //插在头结点位置
    {
    p->next = head;
    head = p;
    }
    else if (k > Length(head) + 1)
    cout << "插入位置错误:" << endl;
    else if (k == Length(head) + 1) //插在末尾位置
    {
    for (i = 1; i <k - 1; i++)
    {
    p1 = p1->next;
    }
    p1->next = p;
    p->next = NULL;
    }
    else
    {
    for (i = 1; i <k; i++) //插在中间位置
    {
    l = p1;
    p1 = p1->next;
    }
    l->next = p;
    p->next = p1;
    }
    return head;
    }
    Date*Delete(Date*head, int k)
    {
    Date*p = head, *p1;
    if (k == 1)
    {
    head = head->next; //删除头结点
    delete p;
    }
    else if (k > Length(head))
    cout << "删除不合法" << endl;
    else
    {
    for (int i = 1; i < k; i++)
    {
    p1 = p; //删除中间结点
    p = p->next;
    }
    p1->next = p->next;
    delete p;
    }
    return head;
    }

  • 相关阅读:
    强制类型转换
    《thinking in java》 接口与内部类
    JAVA强制类型转换(转载+自己的感想)
    Java 面试题问与答:编译时与运行时
    Java注解处理器
    Java反射详解
    BZOJ5072:[Lydsy1710月赛]小A的树(树形DP)
    BZOJ4987:Tree(树形DP)
    BZOJ3791:作业(DP)
    BZOJ1972:[SDOI2010]猪国杀(模拟)
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4397183.html
Copyright © 2020-2023  润新知