算法的时间复杂度的计算
1,找出语句频度最大的那条语句
2,计算基本语句的频度
3,直接写出时间复杂度
推导大O阶方法
1,用常数1取代运行时间中的所有加法常量
2 ,在修改后的运行次数函数中,只保留最高阶项
3,如果最高阶项存在且不为1,则去除与这个项相乘的常数。
例如:for(i = 1;i <= n;i ++) { for(j = 1;j <= n;j ++) { c[i][j] = 0; for(k = 1;k <= n;k ++) { c[i][j] = c[i][j] + a[i][j] * b[k][j]; } } }
T(n) = o(n^3)
最坏时间复杂度 = 算法时间复杂度
数据结构研究
逻辑结构唯一 ----> 存储结构不唯一 ---->云撒UN的实现依赖于存储结构
线性表
定义学生顺序表并实现相应的常用操作
(1)初始化顺序表
(2)在顺序表的第i位置插入一个元素
(3)删除顺序表中第i个元素
(4)读取顺序表中第i个元素
(5)编写主函数,调用所编写的相应操作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define USER "程浩然"
#define PASS "12345"
int ID(char User[],char Pass[])
{
int count = 0;
if(strcmp(USER,User) == 0 && strcmp(PASS,Pass) == 0)
{
count = 1;
}
return count;
}
typedef struct classa{
char name[10];
char sex[3];
int grade;
}classa;
typedef classa ElemType;
typedef struct Student{
ElemType *elem;
int length;
int lislsize;
}Student;
typedef int Status;
Status chushi(Student &L)
{
L.elem = (ElemType *)malloc(10 * sizeof(ElemType));
L.length = 0;
L.lislsize = 10;
return 1;
}
Status charu(Student &L,int i,classa e)
{
classa *p,*q;
classa *newbase;
L.length = 3;
if(i < 1|| i > L.length + 1)
{
printf("对不起,输入的位置超限\n");
exit(0);
}
if(L.length >= L.lislsize)
{
newbase = (classa *)realloc(L.elem,(L.lislsize + 1) * sizeof(classa));
if(!newbase)
{
exit(0);
L.elem = newbase;
L.lislsize += 1;
}
}
q = &L.elem[i - 1];
for(p = &(L.elem[L.length - 1]); p >= q;p --)
{
*(p + 1) = *p;
}
*q = e;
L.length ++;
}
classa shanchu(Student &L,int i)
{
classa e;
L.length = 4;
if(i < 1 || i > L.length)
{
printf("位置不对\n");
exit(0);
}
e = L.elem[i - 1];
classa *q,*p;
for(p = q;p <= &L.elem[L.length - 1];p ++)
{
*p = *(p + 1);
}
L.length --;
return e;
}
int main()
{
Student str;
int i;
int choice;
classa *p;
int s;//插入的位置
classa e;//插入的元素
int k = chushi(str);
int num;//删除的位置
char User[10];
char Pass[10];
i = sizeof(str) / sizeof(int);
printf("欢迎来到陈氏系统\n");
printf("请输入用户名:");
scanf("%s",User);
printf("请输入密码:");
scanf("%s",Pass);
if(ID(User,Pass) == 1)
{
printf("********************************************************************\n");
printf("********************************************************************\n");
printf("********************************************************************************\n");
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<学生信息管理系统>>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("********************************************************************************\n");
printf("********************************************************************\n");
printf("********************************************************************\n");
printf("请输入三位同学的信息:\n");
//printf("%d",i);
for(p = str.elem;p < str.elem + i - 1;p ++)
{
scanf("%s %s %d",p ->name,p -> sex,&p -> grade);
}
for(p = str.elem;p < str.elem + i - 1;p ++)
{
printf("%s %s %d\n",p ->name,p -> sex,p -> grade);
}
while(1)
{
printf("功能如下:\n");
printf("**************************\n");
printf("1,插入操作:\n");
printf("**************************\n");
printf("2,删除操作:\n");
printf("**************************\n");
printf("请输入你的选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入要插入的位置和元素信息:\n");
printf("位置\t姓名\t性别\t成绩\n");
scanf("%d %s %s %d",&s,e.name,e.sex,&e.grade);
charu(str,s,e);
printf("修改后的个人信息:\n");
for(p = str.elem;p < str.elem + i;p ++)
{
printf("%s %s %d\n",p ->name,p -> sex,p -> grade);
}
break;
case 2:
printf("请输入要删除的位置:");
scanf("%d",&num);
e = shanchu(str,num);
printf("删除的同学为:名字:%s\t性别:%s\t%d\n",e.name,e.sex,e.grade);
printf("修改后的个人信息:\n");
for(p = str.elem;p < str.elem + i - 1;p ++)
{
printf("%s %s %d\n",p ->name,p -> sex,p -> grade);
}
break;
}
}
}
else
{
printf("恭喜你,未能成功登录\n");
printf("你的会员已经到期或你还未注册为会员\n");
printf("如果你想成为我们的会员\n");
printf("标准如下:\n");
printf("1,给钱\n");
printf("2,guntuzi\n");
printf("请输入你的选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("可以成为我们的会员\n");
break;
case 2:
exit(0);
break;
}
}
}