数据结构与算法基本程序.docx

上传人:b****5 文档编号:8631369 上传时间:2023-02-01 格式:DOCX 页数:58 大小:28.13KB
下载 相关 举报
数据结构与算法基本程序.docx_第1页
第1页 / 共58页
数据结构与算法基本程序.docx_第2页
第2页 / 共58页
数据结构与算法基本程序.docx_第3页
第3页 / 共58页
数据结构与算法基本程序.docx_第4页
第4页 / 共58页
数据结构与算法基本程序.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

数据结构与算法基本程序.docx

《数据结构与算法基本程序.docx》由会员分享,可在线阅读,更多相关《数据结构与算法基本程序.docx(58页珍藏版)》请在冰豆网上搜索。

数据结构与算法基本程序.docx

数据结构与算法基本程序

数据结构与算法基本程序目录

一、    线性表及其操作

1、    尾插法建立一个单链表,并按顺序输出

2、    单链表的元素查找,按内容查找

3、    元素插入操作

4、    按内容元素删除操作

5、    按位置删除元素

6、    建立双向链表

7、    单链表就地逆置

8、    约瑟夫环问题

二、    栈及其操作

1、    建立堆栈

2、    进栈与出栈

3、    栈的应用,括号匹配

三、    队及其操作

1、    链队列的建立

2、    入队和出队

3、    循环队列建立

4、    循环队列的入队和出队操作

四、    串及其操作

1、    串的朴素匹配

五、    树(二叉树)及其操作

1、    二叉排序树

2、    哈夫曼编码

六、    排序

1、    冒泡排序

2、    直接选择排序法

一、线性表及其操作

//Allcopyrightarepreservedbycobby

/*尾插法建立一个单链表,并按顺序输出*/

#defineNULL0            /*宏定义*/

typedefstructnode        /*定义结点类型的数据结构*/

{

    charc;            /*数据域,类型为字符型*/

    structnode*next;    /*指针域,类型为本结构体类型*/

}*L;            /*类型重定义,即Node和*L和structnode等价*/

main()

{

    Ll,p,q;        /*用指针类型定义三个结点类型的指针*/

    charch;

    l=(L)malloc(sizeof(L));    /*分配内存空间*/

    l->c='\0';            /*为头结点的数据域赋值,值为空*/

    l->next=NULL;            /*指明下一个结点目前不存在*/

    q=l;                /*q为游动指针,链表结点的连结要用*/

    printf("Inputacharacter:

\n");

    scanf("%c",&ch);

    getchar();        //此语句用来吸收键盘输入的回车符,没有其它含义

    while(ch!

='!

')            /*输入!

表示输入结束*/

    {

        p=(L)malloc(sizeof(L));    /*为新输入的数据分配内存空间*/

        p->c=ch;

        p->next=NULL;            /*新输入的结点在链表的最后,即它的后面没有其它元素*/

        q->next=p;            /*q用于将上一个元素链接至当前新元素*/

        q=p;                /*q自己移到当前最后一个元素,以备继续链接所用*/

        scanf("%c",&ch);

        getchar();

    }

    q=l;                /*输入整个链表前,先将q移到链表头,l一般不动*/

    while(q->next!

=NULL)        /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/

    {

        printf("%c-->",q->next->c);    /*q->next->c表示q所指向的下一个元素的数据*/

        q=q->next;            /*完成该元素的输出后,q移至下一个元素重复输出操作*/

    }

}

//Allcopyrightarepreservedbycobby

/*单链表的元素查找,按内容查找*/

#defineNULL0            /*宏定义*/

typedefstructnode        /*定义结点类型的数据结构*/

{

    charc;            /*数据域,类型为字符型*/

    structnode*next;    /*指针域,类型为本结构体类型*/

}*L;            /*类型重定义,即Node和*L和structnode等价*/

main()

{

    Ll,p,q;        /*用指针类型定义三个结点类型的指针*/

    charch;

    intn;

    l=(L)malloc(sizeof(L));    /*分配内存空间*/

    l->c='\0';            /*为头结点的数据域赋值,值为空*/

    l->next=NULL;            /*指明下一个结点目前不存在*/

    q=l;                /*q为游动指针,链表结点的连结要用*/

    printf("Inputacharacter:

\n");

    scanf("%c",&ch);

    getchar();

    while(ch!

='!

')            /*输入!

表示输入结束*/

    {

        p=(L)malloc(sizeof(L));    /*为新输入的数据分配内存空间*/

        p->c=ch;

        p->next=NULL;            /*新输入的结点在链表的最后,即它的后面没有其它元素*/

        q->next=p;            /*q用于将上一个元素链接至当前新元素*/

        q=p;                /*q自己移到当前最后一个元素,以备继续链接所用*/

        scanf("%c",&ch);

        getchar();

    }

    q=l;                /*输入整个链表前,先将q移到链表头,l一般不动*/

    while(q->next!

=NULL)        /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/

    {

        printf("%c-->",q->next->c);    /*q->next->c表示q所指向的下一个元素的数据*/

        q=q->next;            /*完成该元素的输出后,q移至下一个元素重复输出操作*/

    }

    /*--------以上为建立一个单链表-------------*/

    printf("\nInputacharacteryouwannafind\n");

    scanf("%c",&ch);

    printf("\nthecharacteryouwannafindis%c\n",ch);

    q=l->next;        /*q移至头结点的后一个元素,即实际第一个数据点*/

    n=1;    //位置计数器

    while(q!

=NULL)        /*若q不为空,即该结点存在*/

    {

        if(q->c==ch)    /*字符匹配*/

            printf("characterfoundinposition%d\n",n);

        q=q->next;    /*移至下一个元素继续查找*/

        n++;

    }

}

//Allcopyrightarepreservedbycobby

/*元素插入操作*/

#defineNULL0            /*宏定义*/

typedefstructnode        /*定义结点类型的数据结构*/

{

    charc;            /*数据域,类型为字符型*/

    structnode*next;    /*指针域,类型为本结构体类型*/

}Node,*L;            /*类型重定义,即Node和*L和structnode等价*/

main()

{

    Ll,p,q;        /*用指针类型定义三个结点类型的指针*/

    charch;

    intpos,n;

    l=(L)malloc(sizeof(Node));    /*分配内存空间*/

    l->c='\0';            /*为头结点的数据域赋值,值为空*/

    l->next=NULL;            /*指明下一个结点目前不存在*/

    q=l;                /*q为游动指针,链表结点的连结要用*/

    printf("Inputacharacter:

\n");

    scanf("%c",&ch);

    getchar();

    while(ch!

='!

')            /*输入!

表示输入结束*/

    {

        p=(L)malloc(sizeof(Node));    /*为新输入的数据分配内存空间*/

        p->c=ch;

        p->next=NULL;            /*新输入的结点在链表的最后,即它的后面没有其它元素*/

        q->next=p;            /*q用于将上一个元素链接至当前新元素*/

        q=p;                /*q自己移到当前最后一个元素,以备继续链接所用*/

        scanf("%c",&ch);

        getchar();

    }

    q=l;                /*输入整个链表前,先将q移到链表头,l一般不动*/

    while(q->next!

=NULL)        /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/

    {

        printf("%c-->",q->next->c);    /*q->next->c表示q所指向的下一个元素的数据*/

        q=q->next;            /*完成该元素的输出后,q移至下一个元素重复输出操作*/

    }

    /*以上为建立一个单链表*/

    printf("Inputthecharacteranditsposition,suchass,3\n\n");

    scanf("%c,%d",&ch,&pos);

    q=l;

    n=1;

    while(n!

=pos&&q->next!

=NULL)        /*未找到插入位置,且后面还有元素*/

    {

        q=q->next;

        n++;

    }

    /*退出循环后,要么找到插入位置,要么表已到最后,输入的插入位置过大*/

    if(n

        printf("\n\nincorrectposition,insertfailed\n\n");

    else        /*找到插入位置*/

    {

        /*将进行插入操作*/

        p=(L)malloc(sizeof(Node));    /*给新输入的数据分配内存空间*/

        p->c=ch;

        p->next=q->next;

        q->next=p;

    }

    /*操作完成,然后输出新表*/

    

    q=l;                /*输入整个链表前,先将q移到链表头,l一般不动*/

    while(q->next!

=NULL)        /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/

    {

        printf("%c-->",q->next->c);    /*q->next->c表示q所指向的下一个元素的数据*/

        q=q->next;            /*完成该元素的输出后,q移至下一个元素重复输出操作*/

    }

}

//Allcopyrightarepreservedbycobby

/*按内容元素删除操作*/

#include

#include

#defineNULL0            /*宏定义*/

typedefstructnode        /*定义结点类型的数据结构*/

{charc;            /*数据域,类型为字符型*/

    structnode*next;    /*指针域,类型为本结构体类型*/

}Node,*L;            /*类型重定义,即Node和*L和structnode等价*/

main()

{

    Ll,p,q;        /*用指针类型定义三个结点类型的指针*/

    charch;

    intn;

    l=(L)malloc(sizeof(Node));    /*分配内存空间*/

    l->c='\0';            /*为头结点的数据域赋值,值为空*/

    l->next=NULL;            /*指明下一个结点目前不存在*/

    q=l;                /*q为游动指针,链表结点的连结要用*/

    printf("Inputacharacter:

\n");

    scanf("%c",&ch);

    getchar();

    while(ch!

='!

')            /*输入!

表示输入结束*/

    {

        p=(L)malloc(sizeof(Node));    /*为新输入的数据分配内存空间*/

        p->c=ch;

        p->next=NULL;            /*新输入的结点在链表的最后,即它的后面没有其它元素*/

        q->next=p;            /*q用于将上一个元素链接至当前新元素*/

        q=p;                /*q自己移到当前最后一个元素,以备继续链接所用*/

        scanf("%c",&ch);

        getchar();

    }

    q=l;                /*输入整个链表前,先将q移到链表头,l一般不动*/

    while(q->next!

=NULL)        /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/

    {

        printf("%c-->",q->next->c);    /*q->next->c表示q所指向的下一个元素的数据*/

        q=q->next;            /*完成该元素的输出后,q移至下一个元素重复输出操作*/

    }

    /*以上为建立单链表*/

    printf("inputthecharacteryouwannadelete\n\n");

    scanf("%c",&ch);

    printf("theelementyouwannadeleteis%c\n\n",ch);

    q=l->next;

    p=l;

    n=1;

    while(q!

=NULL&&q->c!

=ch)

    {

        p=q;

        q=q->next;

        n++;

    }

    /*退出循环时可能找到指定元素,也可能表读完,需要进一步判断*/

    

    if(q==NULL)

        printf("elementnotfound,deletefailed\n\n");

    else

        p->next=q->next;

    q=l->next;                /*输入整个链表前,先将q移到链表头,l一般不动*/

    while(q!

=NULL)        /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/

    {

        printf("%c-->",q->c);    /*q->next->c表示q所指向的下一个元素的数据*/

        q=q->next;            /*完成该元素的输出后,q移至下一个元素重复输出操作*/

    }

}

//Allcopyrightarepreservedbycobby

/*按位置删除元素*/

#defineNULL0            /*宏定义*/

typedefstructnode        /*定义结点类型的数据结构*/

{

    charc;            /*数据域,类型为字符型*/

    structnode*next;    /*指针域,类型为本结构体类型*/

}Node,*L;            /*类型重定义,即Node和*L和structnode等价*/

main()

{

    Ll,p,q;        /*用指针类型定义三个结点类型的指针*/

    charch;

    intpos,n;

    l=(L)malloc(sizeof(Node));    /*分配内存空间*/

    l->c='\0';            /*为头结点的数据域赋值,值为空*/

    l->next=NULL;            /*指明下一个结点目前不存在*/

    q=l;                /*q为游动指针,链表结点的连结要用*/

    printf("Inputacharacter:

\n");

    scanf("%c",&ch);

    getchar();

    while(ch!

='!

')            /*输入!

表示输入结束*/

    {

        p=(L)malloc(sizeof(Node));    /*为新输入的数据分配内存空间*/

        p->c=ch;

        p->next=NULL;            /*新输入的结点在链表的最后,即它的后面没有其它元素*/

        q->next=p;            /*q用于将上一个元素链接至当前新元素*/

        q=p;                /*q自己移到当前最后一个元素,以备继续链接所用*/

        scanf("%c",&ch);

        getchar();

    }

    q=l;                /*输入整个链表前,先将q移到链表头,l一般不动*/

    while(q->next!

=NULL)        /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/

    {

        printf("%c-->",q->next->c);    /*q->next->c表示q所指向的下一个元素的数据*/

        q=q->next;            /*完成该元素的输出后,q移至下一个元素重复输出操作*/

    }

    /*以上为建立单链表*/

    printf("Inputtheposition\n");

    scanf("%d",&pos);

    p=l;

    n=1;

    while(p->next!

=NULL&&n!

=pos)

    {

        p=p->next;

        n++;

    }

    /*退出循环后,可能找到删除的元素位置,可能表读完,需要进一步判断*/

    if(n==pos)    /*删除位置找到,删除该位置上的元素*/

    {

        p->next=p->next->next;

        //free(p);

    }

    else

        printf("incorrectposition,deletefailed\n");

    q=l;                /*输入整个链表前,先将q移到链表头,l一般不动*/

    while(q->next!

=NULL)        /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/

    {

        printf("%c-->",q->next->c);    /*q->next->c表示q所指向的下一个元素的数据*/

        q=q->next;            /*完成该元素的输出后,q移至下一个元素重复输出操作*/

    }

}

//建立双向链表

#include

#include

#include

#defineNULL0

typedefstructdlnode

{

    charch;

    structdlnode*pri,*next;

}dnode,*dl;

main()

{

    dll,p,q;

    charc;

    l=(dl)malloc(sizeof(dnode));

    l->ch='\0';

    l->next=NULL;

    l->pri=NULL;

    q=l;

    printf("输入字符建立双向链表\n");

    scanf("%c",&c);

    getchar();

    

    while(c!

='!

')

    {

        p=(dl)malloc(sizeof(dnode));

        p->ch=c;

        p->pri=q;

        p->next=NULL;

        q->next=p;

        q=p;

        scanf("%c",&c);

        getchar();

    }

    q=l;

    while(q->next!

=NULL)

    {

        q=q->next;

        printf("%c-->",q->ch);

    }

    

    printf("\n");

   

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1