zoukankan      html  css  js  c++  java
  • 数据结构之顺序表

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

    //数据结构之顺序表
    #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);
    }
    

      

  • 相关阅读:
    NGINX下配置404错误页面的方法分享
    mysql 统计
    nginx日志中访问最多的100个ip及访问次数
    ubuntu下完全安装mcrypt
    ngxtop:在命令行实时监控 Nginx 的神器
    AngularJs 返回上一页
    nginx 报错 upstream timed out (110: Connection timed out)解决方案
    IAP 破解漏洞验证
    AceAdmin-v1.4.0 下载
    TP QQ 微信 微博登录
  • 原文地址:https://www.cnblogs.com/zxjie/p/3102491.html
Copyright © 2011-2022 走看看