zoukankan      html  css  js  c++  java
  • 单链表相关操作

    //2018年07月30日
    //@@代码能改变世界吗
    //欢迎大家指正错误~~~~~~~~!
    #include<iostream>
    using namespace std;
    typedef struct node{
    int data;
    struct node *next;
    }Lnode,*LinkList;
    LinkList listcreat1(LinkList& L) //尾插法建立链表
    {
    L = (LinkList)malloc(sizeof(Lnode));
    Lnode*s, *p = L;
    int data1;
    L->next = NULL; L->data = 111111;
    scanf_s("%d",&data1);
    while (data1!=99999)
    {
    s = (LinkList)malloc(sizeof(Lnode));
    s->data = data1;
    p->next = s;
    s->next = NULL;
    p = s;
    scanf_s("%d", &data1);
    }
    return L;
    }
    LinkList listcreat2(LinkList L){ //用头插法建立链表
    L = (LinkList)malloc(sizeof(Lnode));
    L->data = 111111; L->next = NULL;
    int data1;
    LinkList p;
    scanf_s("%d",&data1);
    while (data1!=99999)
    {
    p = (LinkList)malloc(sizeof(Lnode));
    p->data = data1; p->next = NULL;
    p->next = L->next;
    L->next = p;
    scanf_s("%d", &data1);
    }
    return L;
    }
    //按序号查找结点值
    LinkList getElem(LinkList L,int i)
    {
    int flag = 0;
    LinkList f=L;
    if (i < 0)return NULL;
    if (i == 1)return L;
    while (f&&flag != i)
    {
    f = f->next;
    flag++;
    }
    return f;
    }
    //按值查找结点值
    LinkList getELem(LinkList L,int item)
    {
    LinkList f = L;
    while (f->data != item&&f != NULL)
    f = f->next;
    return f;
    }
    //插入节点操作
    void ElemInsert(LinkList L,int i)
    {
    LinkList qq,c = L;
    int flag = 0;
    qq = (LinkList)malloc(sizeof(Lnode));
    cout << "请输入插入点的数据:" << endl;
    scanf_s("%d",&qq->data);
    if (i <=0)cout << "插入位置有误!";
    else
    {
    while (flag != i-1) //建立链表的时候应该记录元素个数以防止插入位置为后边的非法位置
    {
    c = c->next;
    flag++;
    }
    cout << "前驱节点数据为:"<<c->data << endl; //c为插入位置的前驱节点
    qq->next = c->next;
    c->next = qq;
    }
    }
    void ElemDelete(LinkList L,int i)
    {
    int flag = 0;
    if (i <= 0)cout << "删除节点位置有误!";
    else{
    LinkList d,c = L;
    while (flag != i - 1) //建立链表的时候应该记录元素个数以防止插入位置为后边的非法位置
    {
    c = c->next;
    flag++;
    }
    cout << "前驱节点数据为:" << c->data << endl;
    d = c->next;
    c->next = d->next;
    free(d);
    }
    }

    int main(){
    LinkList start;
    LinkList zflag;
    start = listcreat1(start); zflag = start;
    while (zflag)
    {
    cout << zflag->data<<" ";
    zflag = zflag->next;
    }
    ElemInsert(start,5);
    cout << endl;
    zflag = start;
    while (zflag)
    {
    cout << zflag->data << " ";
    zflag = zflag->next;
    }
    ElemDelete(start,5);
    zflag = start;
    cout << endl;
    zflag = start;
    while (zflag)
    {
    cout << zflag->data << " ";
    zflag = zflag->next;
    }
    return 0;
    }

  • 相关阅读:
    安装并运行Nacos
    为什么浏览器记住密码会影响表单?
    Oracle数据库的函数
    前端axios传递一个包含数组的对象到后台,后台可以用String接收,也可以用List集合接收
    文字链接Link
    DatePicker日期选择器的使用
    前端解决查询慢的问题
    【华为云技术分享】自动驾驶网络系列四:我们谈自动驾驶网络到底在谈什么?
    【华为云技术分享】低代码开发平台发展趋势:低代码——炒作还是趋势?
    【华为云技术分享】【昇腾】ModelArts与Atlas 200 DK云端协同开发——行人检测Demo(提供完整Demo)
  • 原文地址:https://www.cnblogs.com/luoshiyong/p/9402156.html
Copyright © 2011-2022 走看看