C语言实现非循环单链表基本操作

#include<stdio.h>
#include<malloc.h>
typedef struct Node{
    int date;//节点数据
    struct Node * pNext;//指向下一个节点的指针
}*PNODE,NODE;
PNODE creat_list()//创建链表
{
    int len,val,i;

    PNODE pHead = (PNODE)malloc(sizeof(NODE));

    PNODE pTail = pHead;
    pTail->pNext=NULL;

    printf("please import node namber!");

    scanf("%d",&len);

    for(i=0;i<len;i++)
    {
       printf("please import %d value",i+1);
       scanf("%d",&val);

       PNODE pNew = (PNODE)malloc(sizeof(NODE));

       pNew->date=val;
       pTail->pNext=pNew;
       pNew->pNext=NULL;
       pTail  = pNew;

    }
    return pHead;
}

int length(PNODE pHead)//获取链表中节点的长度
{
    int len=0;
    PNODE p = pHead->pNext;
    while(p != NULL)
    {
        len++;
        p=p->pNext;
    }
    return len;
}

void traverse(PNODE pHead)//遍历链表
{
    PNODE p =pHead->pNext;

    while(NULL != p)
    {
        printf("%d ",p->date);
        p=p->pNext;
    }
    return;
}

void sort(PNODE pHead)//排序链表
{
    int i,j,len =length(pHead);

    PNODE p,q;
    for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext)
    {
        for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext)
        {
            if(p->date > q->date)
            {
                p->date = p->date ^ q->date;
                q->date = p->date ^ q->date;
                p->date = p->date ^ q->date;
            }
        }
    }
    return;

}

int isEmpty(PNODE pHead)//判空链表
{
    if(pHead->pNext==NULL)
    {
        return 1;
    }else
    {
        return 0;
    }
}

int insert(PNODE pHead, int pos , int val)//插入节点
{
    int i=0;
    PNODE p = pHead;
    while(p!=NULL && i<pos-1)
    {
        i++;
        p=p->pNext;
    }

    if(pos<1 || i>pos-1)
    {
        printf("postion is err!");
        exit(-1);
        return 0;
    }

    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    PNODE q =p->pNext;
    pNew->date=val;
    p->pNext=pNew;
    pNew->pNext=q;

    return 1;
}

int delete_list(PNODE pHead,int pos, int *val)//删除节点
{
    int i=0;
    PNODE p = pHead;

    while(p->pNext!=NULL && i<pos-1)
    {
        i++;
        p=p->pNext;
    }

    if(p->pNext ==NULL || i>pos-1)
    {
        printf("postion err!");
        exit(-1);
        return 0;
    }

   PNODE q =p->pNext;
   *val = q->date;
   p->pNext=p->pNext->pNext;
   free(q);
   q=NULL;
}
int main(void)
{
    int val=0;
    PNODE pHead = creat_list();
//    delete_list(pHead,1,&val);
    insert(pHead,2,100);
    traverse(pHead);
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值