1.4
(1)
#define max 20
void sum(int a[max][max],int n)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
sum+=a[i][j];
}
该算法平均时间复杂度为O(n^2).
(2)
void fun(int i,int j,int k)
{ int temp;
if(i<j)
{
temp=i;
i=j;
j=temp;
}
if(j<k)
if(i<k)
{
temp=i;
i=k;
k=temp;
printf("%d %d %d",i,j,k);
}
else
printf("%d %d %d",i,k,j);
else
printf("%d %d %d",i,j,k);
}
该算法平均时间复杂度为O(1).
(3)
void fun()
{
int a[100];
int n,max,min,i;
printf("请输入数组的个数n= ");
scanf("%d",&n);
printf("输入数组:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=a[0];
min=a[0];
for(i=0;i<n;i++)
{
if(max<a[i])
{
max=a[i];
}
if(min>a[i])
{
min=a[i];
}
}
printf("最大数是:%d\n",max);
printf("最小数是:%d\n",min);
return 0;
}
该算法平均时间复杂度为O(n)
1.5
(1)
void fun1(int n)
{
int i,k=100;
while(i<n)
{
k=k+1;
i+=2;
}
}i
该算法平均时间复杂度为O(n)
(2)
void fun2(int b[],int n)
{
int i,j,k,x;
for(i-0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(b[k]>b[j])k=j;
x=b[i];b[i]=b[k];b[k]=x;
}
}
该算法平均时间复杂度为O(n^2)
void fun2(int n)
{
int i=0,s=0;
while(s<n)
{
i++;
s=s+i;
}
}
该算法平均时间复杂度为O(n^1/2)
第二章
顺序表
# include <stdio.h>
# include <malloc.h>
typedef int elemtype;
# define max 50
typedef struct
{
elemtype data[max];
int length;
}sqlist;
sqlist *createList()
{ int i;
int n;
sqlist *L;
elemtype a[max];
printf("请输入顺序表元素个数 n=");
scanf("%d",&n);
printf("请按顺序输入顺序表元素!\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
L=(sqlist *)malloc(sizeof(sqlist));
for(i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
return L;
}
sqlist *initList ()
{ sqlist *L;
L=(sqlist *)malloc(sizeof(sqlist));
L->length=0;
return L;
}
void playList(sqlist *&L)
{ if((L->length)>0)
{
for(int i=0;i<L->length;i++)
printf("%5d",L->data[i]);
printf("\n");
}
else
printf("链表为空!\n");
}
void destroyList(sqlist *&L)
{
free(L);
}
void listLength(sqlist *&L)
{
printf("链表长度为 %d!\n",L->length);
}
bool ListEmpty(sqlist *&L)
{
return(L->length==0);
}
bool GetElem(sqlist *&L,int i)
{
if(i<1||i>L->length)
return false;
printf("第 %d 个元素为 %d\n",i,L->data[i-1]);
return true;
}
int LocateElem(sqlist *&L,elemtype e)
{
int i=0;
for(i=0;i<L->length && L->data[i]!=e;i++);
if(i>L->length)
return 0;
else
return i+1;
}
bool ListInsert(sqlist *&L,elemtype e,int i)
{
if(i>L->length+1||i<1)
return false;
i--;
for(int j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(sqlist *&L,int i)
{
if(i<1||i>L->length)
return false;
i--;
for(int j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
int main()
{
sqlist *l;int k=3;elemtype a;
printf(" 初始化....... \n");
l=initList();
printf(" 使用创建函数 \n");
l=createList();
printf(" 输出顺序表表 \n");
playList(l);
if(ListEmpty(l))
printf(" 顺序表为空 \n");
else
printf(" 顺序表不为空 \n");
GetElem( l, k);
printf("请输入要查询的元素a:");
scanf("%d",&a);
printf("该元素是第%d个元素\n",LocateElem(l,a));
k=4;
printf("请输入要在第四个位置插入的元素f:");
scanf("%d",&a);
if(ListInsert(l,a,k))
printf("插入成功.......\n");
printf(" 输出顺序表表 \n");
playList(l);
k=3;
if(ListDelete(l,k))
printf(" 删除第三个元素成功.......\n");
printf(" 输出顺序表表 \n");
playList(l);
printf(" 释放顺序表 \n");
destroyList(l);
return 0;
}
链表
#include <stdio.h>
#include <malloc.h>
typedef struct l
{
int data;
struct l *next;
}list;
void iniList(list *&L)
{
L=(list *)malloc(sizeof(list) );
L->next=NULL;
}
int ListEmpty(list *L)
{
if(L->next==NULL)
return 1;
else
return 0;
}
void creastList(list *&L,int a[],int n)
{
list *s,*r;
L=(list *)malloc(sizeof(list) );
r=L;
int i;
for( i=0;i<n;i++)
{
s=(list *)malloc(sizeof(list));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void PlayList(list *L)
{ list *p=L->next;
while(p!=NULL)
{
printf("%5d",p->data);
p=p->next;
}
printf("\n");
}
int PLayLength(list * L)
{
int i=0;
list *p;
p=L;
while(p->next!=NULL)
{
i++;
p=p->next;
}
return (i);
}
int Display(list * L,int n)
{ if(n<1||n>PLayLength(L))
{
printf("n值不合法\n");
return 0;
}
list *p;
p=L;
int j;
for(j=0;j<n;j++)
{
p=p->next;
}
return p->data;
}
int GetElem(list * L,int a)
{
list *p=L->next;
int i=0,f=0;
while(p!=NULL)
{
i++;
if(p->data==a)
{
f=1;printf("该元素为第%d个\n",i) ;return 0;
}
p=p->next;
}
if(f=0)
printf("不存在\n");
return 0;
}
int Insert(list * L,int n,int a)
{
if(n<1||n>PLayLength(L)+1)
{
printf("n值不合法\n");
return 0;
}
list *p,*s;
p=L;
int j;
for(j=0;j<n-1;j++)
{
p=p->next;
}
s=(list *)malloc(sizeof(list));
s->data=a;
s->next=p->next;
p->next=s;
printf(" 添加成功\n");
return 0;
}
int Delete(list * L,int n)
{
if(n<1||n>PLayLength(L))
{
printf("n值不合法\n");
return 0;
}
list *p,*q;
p=L;
int j;
for(j=0;j<n-1;j++)
{
p=p->next;
}
q=p->next;
p->next=q->next;
free(q);
printf("删除成功!\n");
return 0;
}
void Destroy(list *& L)
{
list *p,*q;
p=L;q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=q->next;
}
free(p);
printf("销毁成功!\n");
}
int main()
{
int i,f, n=5,k=3;
int a[50];
list *L;
iniList(L);
printf("请按顺序输入五个元素\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
creastList(L,a,n);
PlayList(L);
printf("链表有%d个元素\n",PLayLength(L));
if( ListEmpty(L))
printf("链表为空\n");
else
printf("链表不为空\n");
printf("第3个元素为%d\n",Display( L, k));
printf("请输入要查询的元素:");
scanf("%d",&f);
GetElem( L,f);
n=4;
printf("请输入要在第四个位置插入的元素:");
scanf("%d",&f);
Insert( L, n, f);
printf(" 输出顺序表表 \n");
PlayList(L);
n=3;
Delete( L, n);
printf(" 输出顺序表表 \n");
PlayList(L);
printf(" 释放顺序表 \n");
Destroy(L);
return 0;
}