单链表的插入,删除,查找,生成,遍历

​
#include <stdio.h>
#include <stdlib.h>
typedef struct list{
    int data;
    struct list *next;
} Node,*SqList;

void creatList_last(SqList &L){
    //尾插法 
    printf("随机生成25个元素(1-1000):\n");
    L = (SqList)malloc(sizeof(Node));
    L->next=NULL;
    Node *q = (SqList)malloc(sizeof(Node));
    q = L;
    int temp,i;    
    for(i=0;i<25;i++){
        temp = rand()%1000+1;
//        printf("%d ",temp);
        Node *p = (SqList)malloc(sizeof(Node));
        p->data=temp;
        p->next=NULL;
        q->next=p;
        q = p;
    }
//    printf("\n");
}

void creatList_head(SqList &L){
    //头插法 
    printf("随机生成10个元素(1-100)\n");
    L = (SqList)malloc(sizeof(Node));
    L->next=NULL;
    int temp,i;    
    for(i=0;i<10;i++){
        temp = rand()%1000+1;
//        printf("%d ",temp);
        Node *p = (SqList)malloc(sizeof(Node));
        p->data=temp;
        p->next=L->next;
        L->next=p;        
    }
//    printf("\n");
}

void display(SqList &L){
    SqList q;
    q = L->next;
    int i = 0;
    while(q!=NULL){
        printf("%3d:%4d   ",i+1,q->data);
        q=q->next; 
        ++i;
        if(i%10==0){
            printf("\n");
        }
    }
    printf("\n");
}

int LengthList(SqList &L){
    int count = 0;
    SqList q;
    q = L->next;
    while(q!=NULL){
        count++;
        q=q->next; 
    }
//    printf("此链表的表长为%d\n",count);
    return count;
}

Node* getElem(SqList &L,int x){
    //按位查找 
    int i=1;
    SqList q;
    q = L->next;
    if(x<1||x>LengthList(L)){
        printf("输入的序号错误!\n");
        return NULL;
    }else{
        while(q!=NULL&&i<x){
            i++;
            q=q->next;    
        }
        printf("查找的结果为:%d \n",q->data);        
        return q;    
    }     
}

int LocalElem(SqList &L,int value){
    //按值查找 
    int index = 0;
    SqList q;
    q = L->next;
    while(q!=NULL){
        index++;
        if(value==q->data){
            printf("%d在链表中第%d个\n",value,index);
            break;
        }        
        q=q->next;         
    }    
    return index+1;
}

bool InsertElem(SqList &L,int x,int value){ 
    //插入元素 
    Node *stone = (Node*)malloc(sizeof(Node));
    stone->data=value;
    SqList p = L->next;
    int i=1; 
    if(x<1||x>LengthList(L)+1){
        printf("输入的序号错误!\n");
        return false;
    }
    while(p!=NULL&&i<x-1){
        i++;
        p=p->next;
    }
    stone->next = p->next;
    p->next = stone;
    return true;
}

bool DeleteElem(SqList &L,int x){
    // 删除元素 
    if(x<1||x>LengthList(L)){
        printf("输入的序号错误!\n");
        return false;
    }
    SqList p = L->next;
    SqList q;
    int i = 1;
    while(p!=NULL && i<x-1){
        i++;
        p=p->next;        
    }
    q = p->next;
    p->next = q->next;
    free(q); 
}

main(){
    
    SqList L;
    creatList_last(L);
//    creatList_head(L);
    display(L);
    LengthList(L);
    int temp,value;
    printf("请输入要查找的序号:\n");
    scanf("%d",&temp); 
    getElem(L,temp);
//    printf("请输入要查找的值:\n");
//    scanf("%d",&temp); 
//    LocalElem(L,temp);
    printf("请输入要插入的位置和值:\n");
    scanf("%d%d",&temp,&value); 
    InsertElem(L,temp,value);
    display(L);
    LengthList(L);
    printf("请输入要删除的位置:\n");
    scanf("%d",&temp); 
    DeleteElem(L,temp);
    display(L);
}

​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值