• 关于链表的建立插入删除


    #include<stdio.h> #include<malloc.h>
    typedef struct node {
    struct node *next;
    int data;
    }*pointer,node;
    typedef struct {
    pointer elem; //表基址(用指针*elem表示)
    int Length; //表长度(表中有多少个元素)
    }List;
    List l;
    void build() {
    pointer p;
    p=(node*) malloc(sizeof(node));
    l.elem=p;
    for(int i=0;i<l.Length;i++)
    {
    p->next=(pointer)malloc(sizeof(node));
    p=p->next;
    scanf("%d",&p->data);
    }
    p->next=0;
    }
    void insert(int t,int e) {
    pointer p,q;
    p=l.elem;
    if(t<=l.Length)
    {
    l.Length+=1;
    for(int i=1;i<t;i++)
    {
    p=p->next;
    }
    q=(pointer)malloc(sizeof(node));
    q->data=e;
    q->next=p->next;
    p->next=q;
    }
    else {
    printf("不存在所插入位置\n");
    l.Length-=1;
    }
    }
    void dele(int t,int &e) {
    pointer p,q;
    p=l.elem;
    if(p!=NULL) {
    l.Length-=1;
    for(int i=1;i<t;i++)
    {
    p=p->next;
    }
    q=p->next;
    e=q->data;
    p->next=q->next;
    free(q);
    }
    }
    void print() {
    pointer p;
    p=l.elem;
    if(p!=NULL)
    {
    printf("该链表有长度为%d\n",l.Length);
    printf("依次为");
    for(int i=0;i<l.Length;i++)
    {
    p=p->next;
    printf("%d,",p->data);
    }
    printf("\n");
    }
    else
    printf("此链表为空\n");
    }
    void add() {
    int sum=0;
    pointer p;
    p=l.elem;
    for(int i=0;i<l.Length;i++)
    {
    p=p->next;
    sum+=p->data;
    }
    printf("该链表的和为%d\n",sum);
    }

    void main() {
    char a;
    int t,e;
    do
    {
    printf("【1】建立新链表【2】插入【3】删除【4】输出链表【5】求和【0】退出\n");
    scanf("%c",&a);
    if(a=='1')
    {
    printf("请输入您想建立的链表长度");
    scanf("%d",&l.Length);
    build();
    }
    if(a=='2')
    {
    printf("请输入您想插入到第几个元素之前");
    fflush(stdin);
    scanf("%d",&t);
    if(t>l.Length)
    printf("不存在所插入位置\n");
    else
    {
    printf("请输入您想插入的元素值");
    fflush(stdin);
    scanf("%d",&e);
    insert(t,e);
    }
    }
    if(a=='3')
    {
    printf("请输入您想删除第几个元素");
    scanf("%d",&t);
    e=0;
    if(t>l.Length)
    printf("不存在所删除位置\n");
    else
    {
    dele(t,e);
    printf("删除的元素为%d",e);
    }
    }
    if(a=='4')
    {
    fflush(stdin);
    print();
    }
    if(a=='5')
    {
    add();
    }
    if(a<'0'||a>'5')
    {
    printf("必须输入0~5之间的数字,请重新输入\n ");
    } fflush(stdin);
    } while(a!='0');
    }
  • 相关阅读:
    VS Code 快捷键(中英文对照版)
    Linux下SVN提交时强制写日志
    如何搞定SVN目录的cleanup问题和lock问题
    Unity3D中利用Action实现自己的消息管理(订阅/发布)类
    Unity3D热更新之LuaFramework篇[03]--prefab加载和Button事件
    Unity3D热更新之LuaFramework篇[02]--用Lua创建自己的面板
    Unity3D热更新之LuaFramework篇[01]--从零开始
    Unity UI性能优化技巧
    Unity中雾效的开启
    解决Unity中模型部件的MeshCollider不随动画一起运动的问题
  • 原文地址:https://www.cnblogs.com/a9999/p/2816659.html
Copyright © 2020-2023  润新知