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


    #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');
    }
  • 相关阅读:
    word 中如何取消格式标记
    linux 之 汇编语言 的mov和movl sub 和subl add 和addl 的区别??
    Linux 之 AT&T汇编语言 mov、add、sub指令、数据段
    D65光源
    802.11 ------ 简介
    802.11 ------ Beacon帧、Beacon Interval、TBTT、Listen Interval、TIM、DTIM
    NAT ------ 为什么手动设置NAT端口映射(转发)不成功,导致访问不了局域网服务器
    UDP ------ UDP 详解
    UDP ------ UDP IPPROTO_UDPLITE 参数
    GNU C ------ __attribute__
  • 原文地址:https://www.cnblogs.com/a9999/p/2816659.html
Copyright © 2020-2023  润新知