码迷,mamicode.com
首页 > 其他好文 > 详细

链表的基本操作(不带头结点)

时间:2015-06-24 00:37:28      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

首先声明一个结构体类型,包含数据域和指针域。

typedef struct student
{
    int num;
    char name[20];
    struct student *next;
}Student;

第二步是创建一个不含头结点的链表

Student *Create_stu(int n)        //n为创建链表的元素个数 
{
    Student *head,*tail,*p;        //head为首节点,tail为尾节点 
    int num,i;
    char name[20];
    head=tail=NULL;
    for(i=0;i<n;i++)
    {
        p=(Student *)malloc(sizeof(Student));
        scanf("%d",&num);
        scanf("%s",name);
        strcpy(p->name,name);
        p->num=num;
        p->next=NULL;
        if(head==NULL)
            head=p;
        else
            tail->next=p;
        tail=p;
    }
    return head;
} 

第三步我们遍历刚刚创建的单链表

void Trave_stu(Student *head)
{
    Student *p;
    p=head;
    while(p)
    {
        printf("%d  and  %s",p->num,p->name);
        p=p->next;
    }
}

第四步我们进行插入操作,向该函数传递三个参数。因为链表无头结点,所以要考虑插入位置是否为第一个。

 

Student *Insert_stu(Student *head,Student *stu,int n)    //head为头指针,stu为待插入的节点指针,n为插入的位置 
{
    int i=1;
    Student *ptr,*ptr2,*ptr1;
    ptr=stu;
    if(n==1)              //插入位置为第一个; 
    {
        ptr->next=head;
        head=ptr;
    }
    else                //插入位置不位第一个 
    {
        ptr2=head;    
        while(ptr2&&i<n)
        {
            ptr1=ptr2;
            i++;
            ptr2=ptr2->next;
        }
        ptr->next=ptr2;
        ptr1->next=ptr;
    }
    return head;
} 

 

第五步是删除操作,其实和插入操作差不多,也要考虑删除元素是否为第一位。

Student *Delete_stu(Student *head,int n)
{
    Student *p,*ptr1;
    int i=1;
    if(n==1)            //删除元素位于第一个节点 
    {
        head=head->next;
    }
    else                //删除元素不位于第一个节点
    {
        p=head; 
        while(p&&i<n)
        {
            ptr1=p;
            i++;
            p=p->next;
        }
           ptr1->next=p->next;
    }
    return head;
} 

最后非常简单,求链表的长度,设置一个计数器count,遍历链表至末尾,得到链表长度。

int Length_stu(Student *head)
{
    int count=0;
    Student *p;
    p=head;
    while(p)
    {
        count++;
        p=p->next;
    }
    return count;
}

 

链表的基本操作(不带头结点)

标签:

原文地址:http://www.cnblogs.com/tanxing/p/4596589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!