数学结构-链表


#include<iostream>
using namespace std;

typedef struct list{        
    int number;
    struct list *next;
}list,*Linklist;  //Linklist为指向结构体list的指针类型(list*==linklist)

void print(Linklist L){         //遍历
    if(L->next==NULL)
        cout<<"链表为空"<<endl;
        L=L->next;
        while(L!=NULL){
            cout<<L->number<<" ";
            L=L->next;
        }
        cout<<"\n";
    }

void Create(Linklist &L){     //头插法创建链表,并输入一定的数(引用)
    int i;
    L=new list;
    L->next=NULL;
    while(cin>>i){
        if(i==0)
            break;
        list *p=new list;
        p->number=i;
        p->next=L->next;
        L->next=p;
    }
}

void Insert(Linklist &L,int a){     //插入操作,并控制插入位置,防止非法访问
    int pe;
    Linklist p=L;
    Linklist r=new list;
    a--;
    while(a--){
        if(p!=NULL)
            p=p->next;
        else{
            cout<<"越界"<<endl;
            pe=1;
            break;
        }           
    }
    if(pe!=1){
    cout<<"请输入要插入的值"<<endl;
    cin>>r->number;
    r->next=p->next;
    p->next=r;
    }
}

void Delete(Linklist &L,int a){ //删除指定位置元素
    int pe;
    Linklist p=L;
    a--;
    while(a--){
        if(p!=NULL)
            p=p->next;
        else{
            cout<<"越界"<<endl;
            pe=1;
            break;
        }           
    }
    if(pe!=1){
    Linklist q=p->next;
    p->next=q->next;
    free(q); 
    }
}

void Find(Linklist L,int a){    //查找
    int pe;
    while(a--){
        if(L!=NULL)
            L=L->next;
        else{
            cout<<"越界"<<endl;
            pe=1;
            break;
        }            
    }
    if(pe!=1)
        cout<<"搜找的数字为"<<L->number<<endl;
}

int main(){
    int i,n,choice;
    Linklist B;
    while(1){           //功能表
        cout<<"1.头插法建表 \n"<<"2.插入\n"<<"3.删除\n"<<"4.查找"<<endl;
        cin>>choice;
        switch (choice){
        case 1:
            Create(B);
            print(B);
            break;
        case 2:
            cout<<"请输入要插入的位置"<<endl;
            cin>>n;
            Insert(B,n);
            print(B);
            break;
        case 3:
            cout<<"请输入要删除元素的位置"<<endl;
            cin>>n;
            Delete(B,n);
            print(B);
            break;
        case 4:
            cout<<"请输入要查找的位置"<<endl;
            cin>>n;
            Find(B,n);
            break;
        default: 
		    printf("输入错误\n");
            break; 
        }
    }
return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值