中易网

链表的建立,插入,删除C++代码

答案:1  悬赏:30  
解决时间 2021-04-27 23:49
链表的建立,插入,删除C++代码
最佳答案


#include <stdio.h>
#include <stdlib.h>


#define ElemType int


typedef struct lnode{
    ElemType  date;
    struct lnode *next;
}lnode,*linklist;



linklist initlist(void){    //链式表的初始化函数


    linklist head;
    linklist p,q;
    ElemType flag;


    p=(linklist)malloc(sizeof(struct lnode));
    head=q=p;


    if(!p){
    printf("ERROR!\n");
    exit(0);
    }


    scanf("%d",&p->date);
    flag=p->date;
    p->next=NULL;
   
    if(flag==0){exit(0);}


    while(flag!=0){
    p=(linklist)malloc(sizeof(struct lnode));


    if(!p){
    printf("ERROR!\n");
    exit(0);
    }


    scanf("%d",&p->date);
    flag=p->date;
    if(flag==0){break;}   
    else{
    q->next=p;
    q=p;
    p->next=NULL;
    }


    }


    return(head);
}


linklist insert(linklist head,int i,ElemType e){    //插入元素函数
    linklist p1,p2,q;
    p1=head;


    if(1==i){
    q=(linklist)malloc(sizeof(struct lnode));
    q->date=e;
    q->next=p1;
    head=q;
    }


    else{
    while(i!=1&&p1!=NULL){
    p2=p1;
    p1=p2->next;
    i--;
    }


    if(p1==NULL&&i!=1){
    printf("ERROR!");
    }


    if(i==1){
    q=(linklist)malloc(sizeof(struct lnode));
    q->date=e;
    
    p2->next=q;
    q->next=p1;
    }
    }


    return(head);
}
 
void print(linklist head){    //输出函数
    linklist p;
    for(p=head;p!=NULL;p=p->next){
    printf("%d  ",p->date);
    }
}



void lisedel(linklist head){
    linklist p1,p2;
    int i;
    scanf("%d",&i);    //输入要删除的元素的位置


    p1=head;


    if(1==i){
    head=p1->next;
    //free(p1);
    }


    else{
    while(i!=1&&p1!=NULL){
    p2=p1;
    p1=p2->next;
    i--;
    }


    if(p1==NULL&&i!=1){
    printf("ERROR!");
    }


    if(i==1){
    p2->next=p1->next;
    free(p1);


    }
    }


}



linklist nizhi(linklist head){    //逆置线型表
    linklist p1,p2,p3,tail;


    tail=head;
    p1=head;
    p2=p1->next;
    p3=p2->next;


    tail->next=NULL;


    while(1){
    p2->next=p1;
    p1=p2;
    p2=p3;
    p3=p3->next;
    if(p3==NULL){
    head=p2;
    p2->next=p1;
    break;
    }
    }


    return head;


}



int main(){
    printf("    单链顺序表\n");
    linklist head;
    int i=1,flag=0;
    ElemType e;


    while(i!=0){
    printf("\n请选择所要进行的操作:\n");
    printf("    0.初始化链式线型表(以输入0结束)\n");
    printf("    1.插入新的元素\n");
    printf("    2.删除所选的元素\n");
    printf("    3.逆置链式线型表\n");
    printf("    4.输出表中的现有元素\n");


    printf("请选择:");
    scanf("%d",&i);


    switch(i){
    case 0: printf("请输入初始化的元素:\n");
    head=initlist();
    i=1;flag=1;break;
    case 1:    if(flag==1){
    printf("输入要插入的位置和值:\n");
    scanf("%d%d",&i,&e);    //输入要插入的位置和值
    head=insert(head,i,e);    //插入新的元素
    }
    else {
    printf("    ERROR,请先选择0初始化链表!");
    }


    i=1;break;
    case 2:    if(flag==1){
    printf("输入要删除的元素的位置:\n");
    lisedel(head);
    }
    else {
    printf("    ERROR,请先选择0初始化链表!");
    }
    i=1;break;
    case 3: if(flag==1){
    head=nizhi(head);
    printf("逆置成功!");
    }
    else {
    printf("    ERROR,请先选择0初始化链表!");
    }
    i=1;break;
    case 4:    if(flag==1){
    print(head);
    }
    else {
    printf("    ERROR,请先选择0初始化链表!");
    }
    i=1;break;
    }
    }


    return 0;

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
借别人的钱怎么要回来
我爱的人要离开我我该咋办念?
如何才能维持好感情
昆仑OL装备颜色次序谁知道?麻烦告诉我下,小
恒大冰泉直销店NO.11523我想知道这个在什么地
白眼. ..写轮眼..回轮眼
申请大学进比利时圣路易斯大学与美国圣路易斯
VC++6 高手来帮忙看下..
宁波工号牌、胸牌
身上有疤印怎样才能遮住,而且遮起来看起比较
所有的蓝牙耳机都可以用在PSP GO上吗
智能手机E66手谁给我推荐点好的软件啊
烤来烤去在哪里啊,我有事要去这个地方
情人分手后还能做朋友吗?会很恨对方吗?
新买了个proda牌子的手机充电宝怎么知道是在
推荐资讯
时空猎人怎样加入好友公会
一系列五年级语文题
谁有小拉化装部落格的网站噢?
戴尔2350一体机怎么关闭触摸屏
有关悲观主义者的问题?
谁有刷人气留言的软件!急需!!
贷款人公积金状态不正常是怎么回事
机顶盒频道搜索等待密码输入是怎么回事?
我的手很奇怪
我用激光祛斑两个月了,有红印怎么办
求三阶魔方第一层转法
上个星期的一呼百应挑战明星是谁?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?