C 关于链表的一些操作

今年暑假正式开始我的数据结构学习之旅,虽然之前学过一遍了,但是感觉完全是应付考试,没有认真学
所以,今年打算从头到尾正式学习一遍,每天持续更新学习成果。今天重温了一下链表,分享。
#include<stdio.h>
#include<malloc.h>
typedef struct Node
{

    int data;
    int len;
    struct Node *pnext;


} Node,*pnode;
pnode CreateNode()//生成节点,尾插法
{

    pnode phead=(pnode)malloc(sizeof(Node));
    if(phead==NULL)
    {
        printf("fail to allocate memory");
        return -1;
    }
    phead->pnext=NULL;
    printf("please input some number q to quit:\n");
    int n;
    pnode ph=phead;
    for(int i=0; i<5; i++)
    {
        pnode p=(pnode)malloc(sizeof(Node));
        if(p==NULL)
        {
            printf("fail to allocate memory");
            return -1;
        }
        p->data=(i+2)*19;
        phead->pnext=p;
        p->pnext=NULL;
        phead = p; //头节点后移
    }
    return ph;//返回未后移之前的头节点
}
int list(pnode head)//打印链表
{
    int count=0;
    printf("遍历结果:\n");
    while(head->pnext!=NULL)
    {
        printf("%d\t",head->pnext->data);
        head=head->pnext;
        count++;
    }
    printf("链表长度为:%d\n",count);
    return count;
}
void InSert(pnode head,int count)//插入节点
{
    int n,number,c=1;
    printf("请输入插入位置:\n");
    scanf("%d",&n);
    if(n>count+1)
    {
        printf("超过链表范围\n");
        exit(-1);
    }
    printf("请输入插入的数:");
    scanf("%d",&number);
    pnode p=(pnode)malloc(sizeof(Node));
    p->data=number;
    while(c<n)
    {
        head=head->pnext;
        c++;
    }
    p->pnext=head->pnext;
    head->pnext=p;
}
void Delete(pnode head)//删除节点
{
    int n;
    int m=0;
    printf("请输入想要删除的数字:");
    scanf("%d",&n);
    while(head->pnext!=NULL)
    {
        if(head->pnext->data==n)
        {
            head->pnext=head->pnext->pnext;
            m=1;//立个flag证明进来过
        }
    head=head->pnext;
    if(head==NULL)
    break;
    }
    if(m==0)
    printf("没有找到想要删除的数字\n");

}
int main()
{
    pnode p=CreateNode();
    int m=list(p);
    //InSert(p,m);
    Delete(p);
    list(p);
    free(p); //最后一定记得释放内存
    return 0;
}
我是在linux下codeblocks环境下,之前因为没有最后free(节点)导致内存爆满,直接死机了,希望注意这点。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值