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

来源:互联网 发布:知天气决策 编辑:程序博客网 时间:2024/06/17 15:25
优点:线性链表可以迅速实现元素的插入与删除,优化分配了表元素的存储空间
缺点:表元素占用内存空间不连续,对表元素排序最好用顺序表实现
#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;}//Xjianvoid 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;    }}//Cunbiaovoid 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;}//Incertvoid 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;}    

原创粉丝点击