数据结构-链表的基本操作

    
    
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h>
    typedef int ElemType;
    
    typedef struct Node
    {
        
        
        ElemType data;
        struct Node* next;
    }Node;
    
    typedef struct Node* LinkList;
    
    
    int getElem(LinkList L,int i){//根据序号查找元素
        
        int j;
        LinkList p;
        p = L->next;
        j = 1;
        while(p && j<i)
        {
            p = p->next;
            ++j;
        }
        if(!p || j>i)
            return -1;
        else
            return p->data;
        
    }
    
    int list_insert(LinkList *L,int i,ElemType e){//插入
        int j;
        LinkList p,s;
        p=*L;
        j=1;
        while(p&&j<i)
        {
            p=p->next;
            ++j;
        }
        if(!p||j>i)
            return -1;
        else{
            s = (LinkList)malloc(sizeof(Node));
            s->data =e;
            s->next = p->next;
            p->next =s;
            return 1;}
        
    }
    int list_delete(LinkList *L,int i){
        int j;
        int key;
        LinkList p,q;
        p =*L;
        j =1;
        while(p->next&&j<i)
        {
            p = p->next;
            ++j;
        }
        
        if(!(p->next)||j>i)
            return -1;
        q = p->next;
        p->next =q->next;
        key = q->data;
        free(q);
        return key;    
    }
    
    void list_createHead(LinkList *L,int n){
        
        LinkList p;
        int i;
        srand(time(0));
        *L=(LinkList)malloc(sizeof(Node));
        (*L)->next =NULL;
        for(i=0;i<n;i++){
            
            p=(LinkList)malloc(sizeof(Node));
            p->data =rand()%100+1;
            p->next = (*L)->next;
            (*L)->next =p;
        }
    }
    
    void list_createTail(LinkList *L,int n){
        
        LinkList p,r;
        int i;
        srand(time(0));
        *L=(LinkList)malloc(sizeof(Node));
        r=*L;
        for(i=0;i<n;i++){
            p =(Node *)malloc(sizeof(Node));
            p->data =rand()%100+1;
            r->next=p;
            r=p;
        }
        r->next =NULL;
        
    }
    
    void list_print(LinkList L){
    
        LinkList p = L->next;                            //将头节点的指针给予临时节点p
        
        
        while(NULL != p)                                //节点p不为空,循环
            
        {
            printf("%d ",p->data);                    
            p = p->next;                                
        }
        printf("\n");
    }
    
    int main(){
        int x = 0;
        int y = 0;
    LinkList L;
    list_createTail(&L,10);
    printf("尾插法:");
    list_print(L);
    
    y = list_delete(&L,5);
    printf("删除的元素为:%d \n",y);
    printf("删除后:");
    list_print(L);
    
    list_createHead(&L,10);
    printf("头插法:");
    list_print(L);
    x = getElem(L, 3);
    printf("第三个数是:%d \n",x);
    
    list_insert(&L,6,100);
    printf("第六位插入数字100:\n");
    list_print(L);
        return 0;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值