1、Fibonacci数列算法:Fibonacci数列有如下特点:第1,2两个数的值为1,从第3个数开始,该数是其前面两个数之和。
2、即:F1=1(n=1),F2=1(n=2),F3=F(n-1)+F(n-2)(n>=3)。运行看看。
3、数的排列之冒泡法也叫起泡法:排序的方法有两种:一种是“升序”,从小到大,一种是“降序”,从大到小。
4、每次将相邻的两个数比较。将小的调到前头。若有6个数:9,8,5,4,2,0。第一次将最前面的8和9对调。第二次将第二和第三个数对调。。。。。。如此共进行5次,得到8-5-4-2-0-9的顺序。
5、打擂台算法的思路:打擂台算法怎么确定最后的优胜者。先找任一人上台,第二个人上去与之比武,胜者留在台上,再上去第三个人与刚才得胜的人比武,胜者留,败者下。
首先要确定你想采用线性表的顺序存储结构还是链式存储结构。
以顺序存储结构为例:
#include
#include
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElemType;//顺序表测试用
const int MaxSize=100; //100只是示例性的数据,可以根据实际问题具体定义
const int Increasement=10;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SeqList;
Status InitList(SeqList &S,int n=MaxSize)
{//初始化线性表
if(n<=0)
n=MaxSize;
S.elem =(ElemType *)malloc(n*sizeof(ElemType));
if(S.elem ==NULL)
exit(ERROR);
S.length =0;
S.listsize =n;
return OK;
}
int ListLength(SeqList &S)
{ //求线性表的长度
return S.length ;
}
void GetElem(SeqList &S,int i,ElemType &e)
{//按位查找,取线性表的第i个元素
if(i<1 || i>S.length )
exit(ERROR);
e=S.elem [i-1];
}
Status ListInsert(SeqList &S,int i, ElemType e)
{ //在线性表中第i个位置插入值为e的元素
if(i<1 || i>S.length+1 )
return ERROR;
if(S.length >=S.listsize )
{
ElemType *newbase=(ElemType *)realloc(S.elem,Increasement*sizeof(ElemType));
if(newbase==NULL)
exit(ERROR);
S.elem =newbase;
S.listsize =S.listsize+Increasement;
}
for(int j=S.length -1;j>=i-1;j--)
S.elem [j+1]=S.elem [j];
S.elem [i-1]=e;
S.length++;
return OK;
}
Status Output(SeqList S)
{//遍历线性表,按序号依次输出各元素
if(S.length ==0)
return ERROR;
for(int i=0;i
printf("\n");
return OK;
}
void BinInsertSort(int r[ ], int n)
{//折半插入排序
int low,high,mid;
ElemType e;
for (int i=1; i
e=r[i];
low=0; high=i;
while (low<=high)
{
mid=(low+high)/2;
if (e
else low=mid+1;
}
for (int j=i-1; j>=high+1; j--)
r[j+1]=r[j];
r[high+1]=e;
}
}
void MergeList(SeqList La, SeqList Lb, SeqList &Lc) {
// 已知顺序表La和Lb中的元素按值非递减排列。
// 归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减排列。
int La_len, Lb_len;
ElemType ai, bj;
int i=1, j=1, k=0;
InitList(Lc);
La_len = ListLength(La);
Lb_len = ListLength(Lb);
while ((i <= La_len) && (j <= Lb_len)) { // La和Lb均非空
GetElem(La, i, ai);
GetElem(Lb, j, bj);
if (ai <= bj) {
ListInsert(Lc, ++k, ai);
++i;
} else {
ListInsert(Lc, ++k, bj);
++j;
}
}
while (i <= La_len) {
GetElem(La, i++, ai); ListInsert(Lc, ++k, ai);
}
while (j <= Lb_len) {
GetElem(Lb, j++, bj); ListInsert(Lc, ++k, bj);
}
} // MergeList
void main()
{
SeqList La,Lb,Lc;
InitList(La,3);
InitList(Lb,5);
ElemType data;
printf("输入顺序表La的元素值:\n");
for(int i=1;i<=3;i++)
{
scanf("%d",&data);
ListInsert(La, i, data);
}
fflush(stdin);
printf("输入顺序表Lb的元素值:\n");
for(i=1;i<=5;i++)
{
scanf("%d",&data);
ListInsert(Lb, i, data);
}
//La和Lb非递减排序
BinInsertSort(La.elem , 3);
BinInsertSort(Lb.elem , 5);
MergeList(La,Lb,Lc);
Output(Lc);
}
1、如果算法描述已经很彻底了,只要补充变量定义,等语言细节就可以,把算法描述转化为各种编程语言了。如果只是泛泛而论,自己去把算法转换成伪代码描述,或者流程图之类的,然后再用C语言实现。
2、算法只是一种处理数据的一种思想(常用伪代码表示),理解这种思想之后,再用计算机语言表达出来,如果C语法不过关,是很难完成程序的编写,所以C语言本身也要认真学习才行。
哥们你有提问的功夫,你也百度出来啦