基础学习第二弹

来源:互联网 发布:阿里云dns设置 编辑:程序博客网 时间:2024/06/06 10:38

关键算法和数据结构

单链表

  1. 线性表:逻辑上相邻,物理上也相邻。
  2. 单链表:
    数据域+指针域
    如要操作链表,需要声明额外的指针。

单链表的创建算法

定义一个链表结点typedef struct node{    int num;    struct node *next;}stud;算法如下:#include <malloc.h>typedef struct node{    int num;                 //数据域    struct node *next;       //指针域}stud;stud * create(int n)         //创建n个结点{       stud *head,*p1,*p2;     //p1指向新结点,p2指向当前结点    head=p1=p2=NULL;    for(int =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=NULL;                 //最后一个节点指向NULL    return head;}

单链表的查找算法

外部传入一个head指针
typedef struct node{    int num;    struct node *next;}stud;stud * find(stud *head,int i){    stud *p1;  //遍历的指针    p1=head;    while(p1!=NULL) //链表非空    {        if(i==p1->num)            break;        else            {            p1=p1->next;            if(p1==NULL)                {                printf("cannot find!\n");                return NULL;                }            }    }    return p1;}

单链表的删除算法

与查找思路差不多,但要注意head结点和找不到删除节点的情况
bool del(stud *head,int i)  //删除成功返回true,失败或未找到返回false{    bool bret=false;    if(head)    {        stud *p1,*p2;        p1=head;        while(p1->num!=i&&p1->next!=NULL)        {            p2=p1;            p1=p1->next;        }           if(p1)        {            if(p1==head)      //head结点情况处理方式不同                head=p1->next;            else                p2->next=p1->next;            bret=ture;            free(p1);        }    }    return bret;}

单链表的插入算法

前提链表有序stud *insert(stud *head ,stud *p){    stud *p1,*p2;    p1=head;    if(!head)    {        head=p;        head->next=NULL;    }    else    {        while(p->num > p1->num && p1->next!=NULL)        {            p2=p1;            p1=p1->next;        }        if(p1==head)          //注意点        {            head=p;            p->next=p1;        }        else        {        p2->next=p;        p->next=p1;        }    }}

待续。。。

原创粉丝点击