對酒當歌,人生幾何? 譬如朝露,去日苦多

分类 数据结构 下的文章

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ofstream file;
    file.open("yuyin.txt");
    string s;
    char bd='"';
    while(cin>>s)
    {
        if(s[0]==s[1]&&s[1]=='0') break;
        int len=s.size();
        for(int i=0;i<len;i++)
        {
            if(s[i]=='"')
                s[i]='.';
        }
        char bd='"';
        file<<"CreateObject(";
        file<<bd;
        file<<"SAPI.SpVoice";
        file<<bd;
        file<<").Speak";
        file<<bd;
        file<<s;
        file<<bd;
        file<<"\n";
    }

}

 

1.以前学的KMP比较急,其实根本不懂。(重学了一遍,彻底理解)

2.暴力匹配就不多说了,那么有什么办法可以优化呢?那就是向前移动多个位置,但是在移动多个位置的同时,必需满足的是要匹配的字符串必需在前面出现过,而且是从开头,不然你无法判断在移动之后,开头那部分是否相同,这一点应该好想。(其实就是找每个所有字串的前后缀是否相等)

3.next数组保存的就是,如果不匹配就从j=next[j]开始向后匹配(其实就是跳到next[j]这个位置,重新比较)

4.那么怎么构造next数组呢?找i和j记录主串和模式串各自的位置,如果匹配就继续同时向后移,如果不相等,主串的i就需要移回起点,继续寻找前后缀相等的字符串。

#include<iostream>
#include<string.h>
#include<string>
#include<conio.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
#define LL long long int
#define mem(a) memset(a,0,sizeof(a))
typedef struct node
{
    LL num;//学号
    char name[100];//姓名
    char sex[100];//性别
    int year;//年
    int month;//月
    int day;//日
    char edu[100];//学历
    LL tel;//电话
    struct node *next;
} linklist;
void face(linklist *G);
void menu(linklist *G); //显示菜单
void creat(linklist *G);//创建
void insertt(linklist *G);//插入
void display(linklist *G);//显示
void inqure(linklist *G);//查询
void modify(linklist *G);//修改
void deletee(linklist *G);//删除
void bye();//退出
void face(linklist *G)  //外表(完成)
{
    system("color 5E");
    puts("\t\t\t\t  欢迎进入张晓阳大学学生管理系统");
    puts("\t\t\t**************************************************");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @               学生成绩管理系统                 @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                 制作人:张晓阳  @");
    puts("\t\t        @                                日期:2017-12-13 @");
    puts("\t\t\t**************************************************");
    printf("\n\t\t\t\tPress [ Enter ] key to continue……\n");
    getchar();
    system("cls");
    menu(G);
}
void menu(linklist *G)//显示菜单(完成)
{
    system("cls");
    int flag=1,n;
    while(flag)
    {
        system("color 3e");
        puts("\t\t\t\t     欢迎进入学生学籍管理系统");
        puts("\t\t\t**************************************************");
        puts("\t\t        @                   1.创建                       @");
        puts("\t\t        @                   2.插入                       @");
        puts("\t\t        @                   3.显示                       @");
        puts("\t\t        @                   4.查询                       @");
        puts("\t\t        @                   5.修改                       @");
        puts("\t\t        @                   6.删除                       @");
        puts("\t\t        @                   7.退出                       @");
        puts("\t\t        @                             *********          @");
        puts("\t\t        @                             *  zxy  *          @");
        puts("\t\t        @                             *********          @");
        puts("\t\t\t**************************************************");
        printf("\t\t\t请选择服务种类(1-7) : [ ]\b\b");
        scanf("%d",&n);
        if(n>=1&&n<=7)
        {
            flag=0;
        }
        else
        {
            system("cls");
            printf("\n\t\t\t选择出错,请重新选择。。。\n");
        }
    }
    if(n==1)
    {
        creat(G);
    }
    else if(n==2)
    {
        insertt(G);
    }
    else if(n==3)
    {
        display(G);
    }
    else if(n==4)
    {
        inqure(G);
    }
    else if(n==5)
    {
        modify(G);
    }
    else if(n==6)
    {
        deletee(G);
    }
    else if(n==7)
    {
        bye();
    }
}
void creat(linklist *G)//创建
{
    system("cls");
    system("color 3e");
    linklist *p,*q;
    p=new linklist;
    p=G;
    printf("输入录入学生人数:");
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        printf("第%d个学生信息:\n",i);
        q=new linklist;
        printf("学号:");
        scanf("%lld",&q->num);
        //printf("\n");

        printf("姓名:");
        scanf("%s",q->name);
        //printf("\n");

        printf("性别:");
        scanf("%s",q->sex);
        //printf("\n");

        printf("出生年:");
        scanf("%d",&q->year);
        //printf("\n");

        printf("出生月:");
        scanf("%d",&q->month);
        //printf("\n");

        printf("出生日:");
        scanf("%d",&q->day);
        //printf("\n");

        printf("学历:");
        scanf("%s",&q->edu);
        //printf("\n");

        printf("手机号:");
        scanf("%lld",&q->tel);
        //printf("\n");
        q->next=NULL;
        p->next=q;
        p=q;
    }
    getchar();
    printf("\n");
    printf("按回车退出。。。\n");
    getchar();
    menu(G);
}
void insertt(linklist *G)//插入
{
    system("cls");
    system("color 3e");
    printf("在某学号前插入,此学号为:");
    LL aa;
    scanf("%lld",&aa);
    linklist *next;
    next=new linklist;
    next=G->next;
    int flag=0;
    while(next)
    {
        if(next->num==aa)
        {
            printf("找到此学号,请输入插入学生信息\n");
            linklist *q;
            q=new linklist;
            //q=new linklist;
            printf("学号:");
            scanf("%lld",&q->num);
            //printf("\n");

            printf("姓名:");
            scanf("%s",q->name);
            //printf("\n");

            printf("性别:");
            scanf("%s",q->sex);
            //printf("\n");

            printf("出生年:");
            scanf("%d",&q->year);
            //printf("\n");

            printf("出生月:");
            scanf("%d",&q->month);
            //printf("\n");

            printf("出生日:");
            scanf("%d",&q->day);
            //printf("\n");

            printf("学历:");
            scanf("%s",&q->edu);
            //printf("\n");

            printf("手机号:");
            scanf("%lld",&q->tel);
            q->next=next->next;
            next->next=q;
            flag=1;
            break;
        }
        else
        {
            next=next->next;
        }
    }
    if(flag)
    {
        printf("插入成功\n");
        getchar();
        printf("\n");
        printf("按回车退出。。。\n");
        getchar();
        menu(G);
    }
    else
    {
        printf("插入失败\n");
        getchar();
        printf("\n");
        printf("按回车退出。。。\n");
        getchar();
        menu(G);
    }
}
void display(linklist *G)//显示
{
    system("cls");
    system("color 3e");
    linklist *q;
    q=new linklist;
    q=G->next;
    int tt=1;
    while(q)
    {
        printf("第%d个学生信息\n",tt++);
        printf("学号:");
        printf("%lld",q->num);
        printf("\n");

        printf("姓名:");
        printf("%s",q->name);
        printf("\n");

        printf("性别:");
        printf("%s",q->sex);
        printf("\n");

        printf("出生年:");
        printf("%d",q->year);
        printf("\n");

        printf("出生月:");
        printf("%d",q->month);
        printf("\n");

        printf("出生日:");
        printf("%d",q->day);
        printf("\n");

        printf("学历:");
        printf("%s",q->edu);
        printf("\n");

        printf("手机号:");
        printf("%lld",q->tel);
        q=q->next;
    }
    getchar();
    printf("\n");
    printf("按回车退出。。。\n");
    getchar();
    menu(G);
}
void inqure(linklist *G)//查询
{
    system("cls");
    system("color 3e");
    printf("输入你要查询的学号:");
    LL aa;
    scanf("%lld",&aa);
    linklist *q;
    q=new linklist;
    q=G->next;
    int flag=0;
    while(q)
    {
        //printf("fsalfd\n");
        if(q->num==aa)
        {
            printf("查到此学号,信息为:\n");
            printf("学号:");
            printf("%lld",q->num);
            printf("\n");

            printf("姓名:");
            printf("%s",q->name);
            printf("\n");

            printf("性别:");
            printf("%s",q->sex);
            printf("\n");

            printf("出生年:");
            printf("%d",q->year);
            printf("\n");

            printf("出生月:");
            printf("%d",q->month);
            printf("\n");

            printf("出生日:");
            printf("%d",q->day);
            printf("\n");

            printf("学历:");
            printf("%s",q->edu);
            printf("\n");

            printf("手机号:");
            printf("%lld",q->tel);
            flag=1;
            break;
        }
        else
        {
            q=q->next;
        }
    }
    printf("\n");
    if(flag)
    {
        printf("查找成功\n");
        getchar();
        printf("\n");
        printf("按回车退出。。。\n");
        getchar();
        menu(G);
    }
    else

    {
        printf("查找失败\n");
        getchar();
        printf("\n");
        printf("按回车退出。。。\n");
        getchar();
        menu(G);
    }
}
void modify(linklist *G)//修改
{
    system("cls");
    system("color 3e");
    printf("输入你要修改的学号:");
    LL aa;
    scanf("%lld",&aa);
    linklist *q;
    q=new linklist;
    q=G->next;
    int flag=0;
    while(q)
    {
        //printf("fsalfd\n");
        if(q->num==aa)
        {
            printf("查到此学号:\n");

            printf("姓名修改为:");
            scanf("%s",q->name);
            //printf("\n");

            printf("性别修改为:");
            scanf("%s",q->sex);
            //printf("\n");

            printf("出生年修改为:");
            scanf("%d",&q->year);
            //printf("\n");

            printf("出生月修改为:");
            scanf("%d",&q->month);
            //printf("\n");

            printf("出生日修改为:");
            scanf("%d",&q->day);
            //printf("\n");

            printf("学历修改为:");
            scanf("%s",&q->edu);
            //printf("\n");

            printf("手机号修改为:");
            scanf("%lld",&q->tel);
            flag=1;
            break;
        }
        else
        {
            q=q->next;
        }
    }
    printf("\n");
    if(flag)
    {
        printf("查找成功\n");
        getchar();
        printf("\n");
        printf("按回车退出。。。\n");
        getchar();
        menu(G);
    }
    else

    {
        printf("查找失败\n");
        getchar();
        printf("\n");
        printf("按回车退出。。。\n");
        getchar();
        menu(G);
    }
}
void deletee(linklist *G)//删除
{
    system("cls");
    system("color 3e");
    printf("输入你要删除的学号:");
    LL aa;
    scanf("%lld",&aa);
    linklist *first,*next;
    first=new linklist;
    next=new linklist;
    first=G;
    next=G->next;

    int flag=0;
    while(next!=NULL)
    {//printf("hfkjsdfjksd\n");
        if(next->num==aa)
        {
            linklist *q;
            q=new linklist;
            q=next;
            first->next=next->next;
            delete q;
            flag=1;
            break;
        }
        else
        {
            next=next->next;
        }
    }
    if(flag)
    {
        printf("删除成功!\n");
        getchar();
        printf("\n");
        printf("按回车退出。。。\n");
        getchar();
        menu(G);
    }
    else
    {
        printf("删除失败!\n");
        getchar();
        printf("\n");
        printf("按回车退出。。。\n");
        getchar();
        menu(G);
    }
}
void bye() //退出(完成)
{
     system("cls");
    system("color 0F");
    puts("\t\t\t**************************************************");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                    再见!                      @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t        @                                                @");
    puts("\t\t\t**************************************************");
    exit(0);
}
int main()
{
    linklist G;
    G.next=NULL;
    face(&G);
    return 0;
}

 

推荐博客:http://developer.51cto.com/art/201403/430986.htm

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000;
int a[maxn];
int mid;
int partsort(int *a,int low,int high)
{
    int gg=low;
    int flag=a[low];
    //printf("flag=%d\n",flag);
    while(low<high)
    {
        //printf("%d %d\n",a[low],a[high]);
        while(low<high&&a[high]>=flag) --high;
        while(low<high&&a[high]<=flag) ++low;
        //printf("%d %d\n",a[low],a[high]);
        swap(a[high],a[low]);
    }
    swap(a[gg],a[low]);
    //printf("low=%d %d\n",low,a[low]);
    return low;
}
void Qort(int *a,int low,int high)
{
    //printf("%d\n",low);
    if(low<high)
    {
        mid=partsort(a,low,high);
        //printf("    %d %d\n",low,mid-1);
        Qort(a,low,mid-1);
        Qort(a,mid+1,high);
    }

}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        memset(a,-1,sizeof(a));
        for(int i=1;i<=n;i++)
        {
            int w;
            scanf("%d",&a[i]);
        }
        Qort(a,1,n);
        for(int i=1;i<=n;i++)
        {
            printf("%d ",a[i]);
        }
    }
    return 0;
}
/*
3
3 2 1
*/

 

typedef struct node
{
    int data;
    struct node *next;
}node,*linklist;
//node *和linklist同为结构体指针类型
//这两种类型定义本质上是等价的
//为了提高程序的可读性,通常习惯上
//用linklist定义头指针变量