• 数据结构之顺序表


    近期在重温数据结构,做了下总结,内容持续更新中。。。。。

    //数据结构之顺序表
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define MAX 100
    typedef struct sqlist
    {
    	int *data;
    	int length;
    	int size;
    }Sqlist;
    void swap(int *a,int *b)
    {
    	int temp;
    	temp=*a;
    	*a=*b;
    	*b=temp;
    }
    //初始化一个顺序表,返回1代表初始化成功,0表示是失败
    int Sqlistinit(Sqlist *sql)
    {
    	sql->data=(int *)malloc(sizeof(int)*MAX);
    	if(sql->data==NULL)
    		exit(0);
    	sql->size=MAX;
    	sql->length=0;
    	return 1;
    }
    //判断顺序表是否为空
    int Sqlistisempty(Sqlist  *sql)
    {
    	if(sql->length==0)
    		return 1;
    	else 
    		return 0;
    }	
    //在第loc个元前插入元素a,返回1代表插入成功,0代表失败
    int Sqlistinsert(Sqlist *sql,int a,int loc)
    {
    	int i=0;
    	if(loc<1||loc>sql->length+1)
    	{
    		printf("参数不正确");
    		return 0;
    	}
    	if(sql->length>=sql->size)
    	{
    		sql->data=(int *)realloc(sql->data,sizeof(int)*(sql->size+MAX));
    		sql->size+=MAX;
    	}
    	for(i=sql->length-1;i>=loc-1;i--)
    	{
    		sql->data[i+1]=sql->data[i];
    	}
    	sql->data[loc-1]=a;
    	sql->length++;
    	return 1;
    }
    
    //删除第i个元素,返回1表示成功,0表示失败
    int Sqlistdelete(Sqlist *sql,int loc)
    {
    	int i=0;
    	if(i<1||i>sql->length)
    	{
    		printf("参数不正确");
    		return 0;
    	}
    	for(i=loc;i<sql->length;i++)
    	{
    		sql->data[i-1]=sql->data[i];
    	}
    	sql->length--;
    	return 1;
    }
    //获取第i个元素,返回第i个元素的值
    int Sqlistgetelem(Sqlist *sql,int i)
    {
    	if(i<1||i>sql->length)
    	{
    		printf("参数不正确");
    		return 0;
    	}
    	return sql->data[i-1];
    }
    //顺序表的排序,从小到大排序
    void Sqlistsort(Sqlist *sql)
    {
    	int i=0,j=0;
    	if(Sqlistisempty(sql)==1)
    	{
    		printf("顺序表为空");
    		exit(0);
    	}
    	for(i=0;i<sql->length;i++)
    	{
    		for(j=i+1;j<sql->length;j++)
    		{
    			if(sql->data[j]<=sql->data[i])
    				swap(&sql->data[j],&sql->data[i]);
    		}
    	}
    }
    //合并两个已经排序好的顺序表,保持从小到大的顺序
    void Sqlistmerge(Sqlist *sql1,Sqlist *sql2,Sqlist *sql)
    {
    	int i=0,j=0,k=0;
    	sql->length=sql1->length+sql2->length;
    	for(;i<sql1->length&&j<sql2->length;)
    	{
    		if(sql1->data[i]<=sql2->data[j])
    		{
    			sql->data[k]=sql1->data[i];
    			i++;
    			k++;
    		}
    		else
    		{
    			sql->data[k]=sql2->data[j];
    			j++;
    			k++;
    		}	
    	}
    	if(i==sql1->length)
    	{
    		for(;j<sql2->length;)
    		{
    			sql->data[k]=sql2->data[j];
    			k++;
    			j++;
    		}
    	}
    	if(j==sql2->length)
    	{
    		for(;i<sql1->length;)
    		{
    			sql->data[k]=sql1->data[i];
    			k++;
    			i++;
    		}
    	}
    }
    
    //销毁一个顺序表
    void Sqlistdestory(Sqlist *sql)
    {
    	free(sql->data);
    }
    
    //顺序表已经存在,置空顺序表
    void Sqlistcreate(Sqlist *sql,int n)
    {
    	int i=0;
    	for(i=0;i<n;i++)
    	{
    		scanf("%d",&sql->data[i]);
    		sql->length++;
    	}
    }
    //以此输出顺序表里面的元素
    void Sqlistdisplay(Sqlist *sql)
    {
    	int i=0;
    	if(Sqlistisempty(sql)==1)
    	{
    		printf("表为空");
    		exit(1);
    	}
    	for(i=0;i<sql->length;i++)
    	{
    		printf("%d ",sql->data[i]);
    	}
    	printf("\n");
    		
    }
    void main()
    {
    	Sqlist sql1,sql2,sql3;
    	Sqlistinit(&sql1);
    	Sqlistinit(&sql2);
    	Sqlistinit(&sql3);
    	printf("sql is empty ?%d\n",Sqlistisempty(&sql1));
    	Sqlistcreate(&sql1,5);
    	printf("sql:");
    	Sqlistdisplay(&sql1);
    	Sqlistcreate(&sql2,7);
    	printf("sql2:");
    	Sqlistdisplay(&sql2);
    	printf("sql is empty ?%d\n",Sqlistisempty(&sql1));
    	Sqlistinsert(&sql2,7,5);
    	printf("after insert sql2:");
    	Sqlistdisplay(&sql2);
    	printf("after sorted sql1:");
    	Sqlistsort(&sql1);
    	Sqlistdisplay(&sql1);
    	printf("after sorted sql2:");
    	Sqlistsort(&sql2);
    	Sqlistdisplay(&sql2);
    	printf("after merge sql3:");
    	Sqlistmerge(&sql1,&sql2,&sql3);
    	Sqlistdisplay(&sql3);
    }
    

      

  • 相关阅读:
    MyBatis通过Mapper动态代理来实现curd操作
    通过Mybatis原始Dao来实现curd操作
    MyBatis最原始的实现curd的操作
    通过重写request.getParameter方法来解决中文乱码问题。
    第九章:Servlet工作原理解析
    简述servlet
    Java中几个常用并发队列比较 | Baeldung
    记录java程序一次CPU占用90%问题排查过程
    日志查看
    mongo
  • 原文地址:https://www.cnblogs.com/zxjie/p/3102491.html
Copyright © 2020-2023  润新知