今日任务:完成使用多文件编写顺序表排序
预习单链表内容,阅读大话数据结构
趣味00题编程练习6题
完成情况:都已完成
顺序表代码如下:头文件
#ifndef _PAIXU_H
#define _PAIXU_H
#define size 10
#define SUCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003
typedef int ElemType;
struct sequence
{
int length;
ElemType *date;
};
typedef struct sequence SEQ;
int sequencetra(SEQ list, void (*p)(ElemType));
int sequenceInit(SEQ *list);
int cmp(ElemType x,int y);
int insert(SEQ *list,int (*p)(SEQ,ElemType,int (*)(ElemType,int)),int num);
int find(SEQ list,int num,int (*p)(ElemType, int));
#endif
main文件
#include"paixu.h"
#include<stdio.h>
void print(ElemType a)
{
printf("%d ",a);
}
int main()
{
int ret;
int i,num;
SEQ list;
ret=sequenceInit(&list);
if(ret==FAILURE)
printf("can't init\n");
else
printf("init success\n");
for(i=0;i<size;i++)
{
printf("Please input a number\n\n");
printf("'777 is over\n\n'");
scanf("%d",&num);
if(num==777)
{
printf("over\n");
break;
}
ret=insert(&list,find,num);
if(ret==SUCESS)
printf("suncess!\n");
else
printf("failure!\n");
}
ret=sequencetra(list,print);
if(ret==FAILURE)
printf("can't do it\n");
else
printf("yes we can!\n");
}
函数文件:
#include"paixu.h"
#include<stdio.h>
#include<stdlib.h>
int sequenceInit(SEQ *list)
{
if(NULL==list)
{
return FAILURE;
}
list->date=(ElemType *)malloc(sizeof(ElemType)*size);
list->length=0;
return SUCESS;
}
int cmp(ElemType x,int y)
{
if(x>y)
return TRUE;
else
return FALSE;
// return (x>y)? TRUE : FALSE;
}
int sequencetra(SEQ list, void (*p)(ElemType))
{
int i;
if(p==NULL)
return FAILURE;
for(i=0;i<list.length;i++)
{
p(list.date[i]);
}
}
int insert(SEQ *list,int (*p)(SEQ,ElemType,int (*)(ElemType,int)),int num)
{
int i,k;
// if(list==NULL)
// return FAILURE;
if(list->length==0)
{
list->date[0]=num;
list->length++;
return SUCESS;
}
k=find(*list,num,cmp);
printf("k=%d\n",k);
if(k==FAILURE)
return FAILURE;
if(k==FALSE)
{
list->date[list->length]=num;
list->length++;
return SUCESS;
}
for(i=0; i<list->length-k+1;i++)
{
list->date[list->length-i]=list->date[list->length-i-1];
}
list->date[k-1]=num;
list->length++;
return SUCESS;
}
int find(SEQ list,int num,int (*p)(ElemType,int))
{
int i,k;
if(p==NULL||list.length==10)
return FAILURE;
for(i=0;i<size;i++)
{
k=p(list.date[i],num);
if(k==TRUE)
{
printf("k2=%d\n",k);
return i+1;
}
}
return FALSE;
}