zoukankan      html  css  js  c++  java
  • 07、顺序表编程考点

    顺序表编程考点

    1、顺序表删除算法

    //顺序表删除算法
    typedef struct{
    	Elemtype *elem;
    	int length;
    	int listsize;
    }Sqlist;
    int ListDelete_sq(Sqlist *L,int i)			//删除顺序表L中的第i个元素
    {
    	int k;
    	if(i<1 || i>L->length)					//删除位置出错
    	return 0;
    	for(k = i;k< L->length; k++)			//从第i+1个位置开始,每个元素前移一个位置
    	L->slist[k] = L->slist[k+1];
    	--L->length;							//表的长度减1
    	return 1;								//返回成功
    }
    

      

    2、将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表

    //将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表
    typedef struct{
    	Elemtype *elem;
    	int length;
    	int listsize;
    }Sqlist;
    void merge(Sqlist A,Sqlist B,Sqlist &C)
    {
    	int i=0,j=0,k=0;						//A、B、C三个数组指针i、j、k
    	while(i<A.length && j<B.length)			//退出循环的条件
    	{
    		if(A.elem[i]<=B.elem[j])			//如果A.elem[i]<=B.elem[j]
    		{
    			C.elem[k]=A.elem[i];			//将A.elem[i]接在数组C的k位置
    			i++;							//数组A和数组C的数组指针加1
    			k++;
    		}
    		else								//如果A.elem[i]>B.elem[j]
    		{
    			C.elem[k] = B.elem[j];			//将A.elem[j]接在数组C的k位置
    			j++;							//数组B和数组C的数组指针加1
    			k++;
    		}
    	}
    	while(i<A.length)						//数组A还有元素但是B中所有元素均在C中
    	{
    		C.elem[k] = A.elem[i];				//依次将数组A中剩余元素接在C表表尾
    		i++;
    		k++;
    	}
    	while(j<B.length)						//数组B还有元素但是A中所有元素均在C中
    	{
    		C.elem[k] = B.elem[j];				//依次将数组A中剩余元素接在C表表尾
    		j++;
    		k++;
    	}
    	C.length = k;							//将A、B数组全部接完,表C长为原A、C表长之和
    }
    

      

    3、顺序表元素递增有序,将x插入到顺序表以后,保持该表的有序性

    //顺序表元素递增有序,将x插入到顺序表以后,保持该表的有序性
    typedef struct{
    	Elemtype *elem;
    	int length;
    	int listsize;
    }Sqlist;
    void InserSqlist(Sqlist &va, int x)
    {
    	int i;
    	if(va.length >Maxsize)
    	return;
    	for(i = va.length-1; va.elem[i]>x && i>=0;i--)
    	va.elem[i+1]=va.elem[i];
    	va.elem[i+1]=x;
    	va.length++;
    }
    

      

    4、试写一个算法,实现顺序表的就地逆置

    //试写一个算法,实现顺序表的就地逆置
    void reverse(int a[],int size)
    {
    int i, j, tmp;
    for(i=0,j=size-1;i<j;i++,j--)
    {
    	tmp=a[i];
    	a[i]=a[j];
    	a[j]=tmp;
    }
    }
    

      

    5、将顺序表中正、负整数分开

    //将顺序表中正、负整数分开
    void part(int array[],int n)
    {
    	int i,j;
    	i=1;
    	j=n;
    	while(i<j)
    	{
    		while(i<j && array[i]<0)			//i指针从前往后扫描数组,遇到比0大的值停下
    		i++;
    		while(i<j && array[j]>=0)			//j指针从前往后扫描数组,遇到比0小的值停下
    		j--;
    		if(i<j)								//如果i<j,交换两个指针分别指向的元素
    		{
    			array[0]=array[i];
    			array[i]=array[j];
    			array[j]=array[0];
    		}
    	}
    }
    

      

    6、将数组中的数按照从大到小的顺序排序

    //将数组中的数按照从大到小的顺序排序
    void ReArrange( int A[], int B[], int n)
    {
    	for(i=0; i<n; i++)
    		B[n-A[i]] = A[i];
    }
    

      

    7、折半查找查找数值为x的值

    //折半查找查找数值为x的值
    void SearchExchangeInsert(Elemtype a[],elemtype x)
    {
    	low = 0;					//low和high指向线性表下界和上界的下标
    	high = n-1;
    	while(low <= high)
    	{
    		mid = (low +high)/2;	//找中间位置
    		if(a[mid] == x)			//找到x,退出while循环
    		break;
    		else if(a[mid] < x)
    			low = mid +1;		//到中点mid的右半去查
    			else high = mid - 1;//到中点mid的左半去查
    	}
    	if(a[mid]==x && mid != 0)	//若最后一个元素与x相等,则不存在与其后继交换的操作
    	{
    		t=a[mid];
    		a[mid] = a[mid+1];
    		a[mid+1] = t;
    	}							//数组x与其后继元素位置交换
    	if(low > high)				//查找失败,插入数据元素x
    	{
    		for(i = n-1; i>high;i--)
    		a[i+1] = a[i];			//后移元素
    		a[i+1] = x;				//插入x
    	}//结束插入
    }//结束算法
    

      

  • 相关阅读:
    HDFS架构原理
    Hadoop集群搭建
    解决8080端口号占用问题
    基于SSM的Maven项目(Redis和Mysql)配置文件整合
    maven 集成SSM项目配置文件模版
    初识Spring笔记
    初识Mybatis一些总结
    将对数据库的增删改查封装为方法
    10分钟安装Elasticsearch
    ThreadLocal详解
  • 原文地址:https://www.cnblogs.com/wxt19941024/p/7460607.html
Copyright © 2011-2022 走看看