C语言链表操作(一)

刚学过链表的大一萌新对链表相关操作的梳理。留作复习用。(菜鸟的第一篇博客哈)

(一)链表的创建

模板:

typedef struct node
{
    int data;(数据域:用来存放数据)
    struct *next;(指针域:用来链接前后结点)
}SNode;

 

创建部分——

1.尾插法

void CreateList1(LNode *H,int n)//(*H为头指针)
{
    LNode *p,*r;//(r为尾指针,始终指向链表尾部,以便新结点的插入)
    int x;
    int i;
    head->next = NULL;//(在没有输入数据之前,先将头指针指空)
    r=H;//(没输入数据前,H既是头也是尾)
    scanf("%d",&x);
    for(i=0;i<n;i++)
    {
        scanf("%d",&x);
        p=(LNode *)malloc(sizeof(LNode));//(在for循环中为每一个链表开辟空间)
        p->data=x;
        r->next=p;//(将新结点p插入尾部)
        r=p;//(新结点即为尾结点)
    }
    r->next=NULL;//(循环结束,尾指针指NULL)
}

2.头插法——

void CreateList2(SNode *H,int n)
{
    SNode *p;
    int x;
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&x);
        p=(SNode *)malloc(sizeof(SNode));//创建新结点 为每个新结点开辟空间
        p->data=x;
        p->next=H->next;//(将头结点next指向赋给新结点)
        H->next=p;//(将新数据连接到头结点之后)
    }
}

注:(1)先从字面上理解二者的区别,对二者有一个感性的认识。

尾插法:将新数据插入链表尾部

头插法:将新数据插入链表头部

(2)两种方法中,新节点的创建方法是相同的(用malloc动态创建)

(3)尾插法需要两个指针,往往先移动尾指针,然后新结点指针再跟着移动。

头插法不再需要尾指针了,主要是想办法把新来的成员插入链表头结点之后。

 

输出部分——

void print(LNode *H)
{
    LNode *p;
    p=H->next;//(首先将头指针赋给p)
    while(p!=NULL)
    {
        printf("%d  ",p->data);
        p=p->next;//(指向下一个结点,依次输出)
    }
}

主函数部分——

int main()
{
    LNode *H;
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        H=(LNode *)malloc(sizeof(LNode));//(首先为头结点开辟空间)
        H->next=NULL;//(将头指针指NULL)*注
        CreateList1(H,n);
        output(H);
        printf("%\n");
    }
    return 0;
}

*注:一定不要忘记H->next=NULL,因为上一步创建了一个只有头结点的链表,所以在CreateList调用之前,头指针一定要指空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值