华清8月3 数据结构 day3

#ifndef _FUN_H_
#define _FUN_H_

#include
#include
#include

#define MAX 40

typedef int datatype;    //数据元素的类型,以int为例

typedef struct      //定义顺序表类型
{
	datatype data[MAX];           //存储数据元素的数组
	int len;             //存储当前顺序表的长度
}fun,*funptr;  //重命名为一个结构体变量和一个指针类型

//创建顺序表
funptr list_create();


//判断满
int list_full(funptr S);



//判断空
int list_empty(funptr S);




//向顺序表中添加元素
int list_add(funptr S,datatype e);




//遍历顺序表
void list_show(funptr S);





//任意位置插入元素
int list_insert_pos(funptr S,int pos,datatype e);



//任意位置删除元素




//按位进行修改



//按值进行修改



//查找指定位置的元素


//按值进行查找元素
int list_search_value(funptr S,datatype e);

//求最值操作
datatype list_mvalue(funptr S,int flag);




//将顺序表排序,选择排序
void list_sort(funptr S,int flag);


//顺序表去重


//顺序表释放



//顺序表反转
void list_reverse(funptr S);



#endif


#include"fun.h"

//创建顺序表
funptr list_create()
{
	//在堆区申请一个顺序表的空间
	funptr S=(funptr)malloc(sizeof(fun));  //指针的
	//判断是否申请成功
	if(NULL==S)
	{
		printf("顺序表创建失败\n");
		return NULL;
	}
	//此时顺序表已经创建成功
	memset(S->data,0,sizeof(S->data));   //清空数组
	S->len=0;  //数组长度清零
	printf("顺序表申请成功\n");
	return S;
}

//判满
int list_full(funptr S)
{	if(NULL==S)
	{
		printf("所给顺序表不合法\n");
		return 0;
	}
	//合法,则返回是否已满
	return S->len==MAX;
}

//判空,如果空返回真,非空返回假
int list_empty(funptr S)
{
	if(NULL==S)
	{
		printf("所给顺序表不合法\n");
		return 0;
	}
	//合法返回是否为空
	return S->len==0;
}

int list_add(funptr S,datatype e)
{
	if(NULL==S||list_full(S))
	{
		printf("添加失败\n");
		return 0;
	}
	S->data[S->len]=e;  //将元素放入最后的位置
	S->len++;       //表的变化
	printf("添加成功\n");  
	return 1;
}

void list_show(funptr S)
{
	if(NULL==S||list_empty(S))
	{
		printf("遍历失败\n");
		return;
	}
	printf("当前顺序表的元素分别是:");
	for(int i=0;ilen;i++)
	{
		printf("%d\t",S->data[i]);
	}
	putchar(10);
}


int list_insert_pos(funptr S,int pos,datatype e)
{
	if(NULL==S||list_full(S)||pos<0||pos>S->len)
	{
		printf("插入失败\n");
		return 0;
	}
	for(int i=S->len-1;i>=pos;i--)
	{
		S->data[i+1]=S->data[i];
	}
	S->data[pos]=e;
	S->len++;
	printf("插入成功\n");
	return 1;
}

//调用查找函数
int list_search_value(funptr S,datatype e)
{
	if(NULL==S)
	{
		printf("查找失败\n");
		return -1;
	}
	for(int i=0;i < S->len;i++)
	{
		if(S->data[i]==e)
		{
			printf("找到该元素,在%d位\n",i+1);
			return i+1;
		}
	}
	printf("没有找到该元素\n");
	return -1;
}

//调用排序函数
void list_sort(funptr S,int flag)
{
    if(NULL==S)
    {
        printf("排序失败\n");
        return;
    }
    int index=0;
    int j,temp;
    for(int i=1;i < S->len;i++)
    {
        index=i-1;
        for(j=i;jlen;j++)
        {
            if(flag==0)
            {
                if(S->data[j]data[index])
                {
                    index=j;
                }
            }
            else if(flag==1)
            {
                if(S->data[j]>S->data[index])
                {
                    index=j;
                }
            }
        }
        if(index!=i-1)
        {
            temp=S->data[i-1];
            S->data[i-1]=S->data[index];
            S->data[index]=temp;
        }
    }
	printf("排序后的元素为:\n");
    for(int i=0;ilen;i++)
    {
        printf("%d\n",S->data[i]);
    }
}


//求最值操作
datatype list_mvalue(funptr S,int flag)
{
	int temp=S->data[0];
	for(int i=0;ilen;i++)
	{
		if(flag==0)
		{
			if(tempdata[i])
			{
				temp=S->data[i];
			}
		}
		else if(flag==1)
		{
			if(temp>S->data[i])
			{
				temp=S->data[i];
			}
		}
	}
	if(flag==0)
	{
		printf("最大值为:%d\n",temp);
	}
	else if(flag==1)
	{
		printf("最小值为:%d\n",temp);
	}
}

//调用反转函数
void list_reverse(funptr S)
{
	int head=0;
	int tail=S->len-1;
	datatype temp;
	while(headdata[head];
		S->data[head]=S->data[tail];
		S->data[tail]=temp;
		head++;
		tail--;
	}
}



#include"fun.h"

int main(int argc, const char *argv[])
{
	//申请一个顺序表
	funptr S=list_create();
	if(NULL==S)
	{
		return -1;
	}
	//调用添加函数
	list_add(S,3);
	list_add(S,4);
	list_add(S,5);
	list_add(S,6);
	//调用遍历函数
	list_show(S);
	//调用插入函数
	list_insert_pos(S,1,100);
	list_insert_pos(S,3,99);
	list_show(S);
	int a; 
	printf("请输入要查找的元素\n");
	scanf("%d",&a);
	//调用查找函数
	list_search_value(S,a);
	int b;
	printf("请输入排序方法 0为升序 1为降序\n");
	scanf("%d",&b);
	//调用排序函数
	list_sort(S,b);

	int c;
	printf("请选择要输出的值, 0为最大值,1为最小值");
	scanf("%d",&c);
	list_mvalue(S,c);

	list_reverse(S);
	list_show(S);


	


	return 0;
}

数据结构day2 - GitMind

数据结构day3 - GitMind

在线思维导图 - GitMind

你可能感兴趣的:(数据结构)