线性链表的定义与元素插入、删除的操作实现

优点:线性链表可以迅速实现元素的插入与删除,优化分配了表元素的存储空间
缺点:表元素占用内存空间不连续,对表元素排序最好用顺序表实现
#define NULL 0
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
    定义结构体/// 
        int e;
        struct Node *next;
        }Node,*DLB; 
void Xinjian(DLB &L){
    /建立一个 空链表///
     L=(DLB)malloc(sizeof(Node));
     L->next=NULL;
}//Xjian
void Cunbiao(DLB &L,int n){
    //存储长度为n的线性表 
    Node *p,*q;
    int i;
    q=L;
    for(i=1;i<=n;i++)
    {
        p=(DLB)malloc(sizeof(Node));
        scanf("%d",&p->e);
        //p->next=L->next;
        p->next=q->next;
        q->next=p;
        q=q->next;
        //L->next=p;
    }
}//Cunbiao
void Print(DLB L){
    //打印输出 
    int i;
    while(L->next)
    {
        printf("%d ",L->next->e);
        L=L->next;
    }
    puts("");
}
void Incert(DLB &L,int t,int e){
    //在位序为t的元素前插入一个新的元素e
    //注意这里默认插入位置是合法的,程序的健壮性由读者自己开发哦 
    int i;
    Node *p,*q;
    p=L;
    q=(DLB)malloc(sizeof(Node));
    q->e=e;
    for(i=1;i<t;i++)
    {
        p=p->next;
    }
    q->next=p->next;
    p->next=q;
}//Incert
void Delet(DLB &L,int t,int &e){
    //删除位序为t的线性表元素并用e返回被删元素的值 
    int i;
    Node *p,*q;
    p=L;
    q=L;
    for(i=1;i<=t;i++)
    {
        if(i<t)p=p->next;
        q=q->next;
    }
    e=q->e;
    p->next=q->next;
    free(q);
}     
int main()
{
    DLB L;
    int n,e1,e2,E,e; 
    Xinjian(L);
    printf("请输入单链表长度:\n");
    scanf("%d",&n);
    Cunbiao(L,n);
    Print(L);
    printf("请输入插入元素位置与插入元素的值:\n");
    scanf("%d %d",&e1,&E);
    Incert(L,e1,E);
    Print(L);
    printf("请输入删除元素位置:\n");
    scanf("%d",&e2);
    Delet(L,e2,e);
    printf("被删除元素的值为%d\n",e);
    Print(L);
    system("pause");
    return 0;
}
    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值