基础学习第三弹

来源:互联网 发布:软件收入百强 编辑:程序博客网 时间:2024/06/06 13:18

今天被老师拉去做“苦力”没有学多少。。。惭愧
接第二弹

循环链表

与单链表区别在于尾结点的指针不是NULL,而是指向head
算法没什么大的区别,注意尾结点p2->next=NULL改为p2->next=head;
遍历时,p1->next!=NULL改为p1->next!=head;

  • 循环链表的创建算法
#include <malloc.h>tyepdef struct node{    int num;    struct node *next;}stud;stud *create(int n){       stud *head,*p1,*p2;    head=p1=p2=NULL;    for(int i=0;i<n;i++)    {    p1=(stud *)malloc(sizeof(stud));    p1->num=i;    if(i==0)        head=p1;    else        p2->next=p1;    p2=p1;    }    p2->next=head;//!!!!!!!    return head;}
  • 循环链表的查找算法
stud *find(stud *head,int i){       stud *p1;    p1=head;    while(p1!=NULL)    {        if(p1->num==i)        {            break;        }        else        {            p1=p1->next;            if(p1==head)//!!!!!!!            {            p1=NULL;            }        }    }    return p1;}
  • 循环链表的删除算法
bool del(stud *head ,int i){       bool consq=false;    if(head)    {        stud *p1,*p2;        p1=head;        while(p1->num!=i&&p1->next!=head)//!!!        {            p2=p1;            p1=p1->next;        }        if(p1->num==i)        {            if(p1==head)//!!!!            {                head=p1->next;            }            else            {                p2->next=p1->next;            }            free(p1);//!!!!            consq=true;        }    }    return consq}

都是不考虑重复元素的,碰到重复的情况,算法需要进行调整。目前想法是碰到一个删除一个,直到遍历完成,而不是这里的先遍历,一旦碰到符合条件的就停止进行处理。还需考虑有序无序。

  • 循环链表的插入算法
stud *insert(stud *head,stud *p){       if(!head)        {        head=p;        p->next=head;            //!!!!!        }    else    {        stud *p1,*p2;        p1=head;        while(p->num >p1->num && p1->next!=head)        {            p2=p1;            p1=p1->next;        }        if(p->num<=p1->num)        {            if(p1==head)            {                head=p;                p->next=head;//书上没加,我觉得应该加一个            }            else            {                p2->next=p;                p->next=p1;            }        }        else                //注意点!单链表我没加,略微不同,我觉得单链表那书上也写这个有点多余        {            p1->next=p;            p->next=head;        }    }}

双向链表

待续。。。

原创粉丝点击