#include<cstdio>
#define maxsize 50
typedef int elemtype;
typedef struct {
elemtype data[maxsize];
int length;
}sqlist;
int main(void)
{
return 0;
}
*******************************************
#define initsize 100;
typedef struct {
elemtype *data;
int maxsize,length;
}sqlist;
*******************************************

bool listinsert(sqlist &l,int i,elemtype e)
{
if(i<1 || i>l.length+1) return false;
if(l.length>=maxsize) return false;
for(int j=l.length;j>=i;j--)
l.data[j]=l.data[j-1];
l.data[i-1]=e;
l.length++;
return true;
}
********************************************
bool listdelete(sqlist &l,int i,int e)
{
if(i<1 || i>l.length) return false;
e = l.data[i-1];
for(int j=i;j<l.length;j++)
l.data[j-1]=l.data[j];
l.length--;
return true;
}
*******************************************
int locateelem(sqlist l,elemtype e)
{
int i;
for(i=0;i<l.length;i++)
{
if(l.data[i]==e) return i+1;
}
return 0;
}
******************************************

标题有些:
018页1题
bool deletemin(sqlist&l,elemtype e)//没有运用引证类型
{
if(l.length==0) return false;
int index=0;
for(int i=1;i<l.length;i++)
if(l.data[i]<l.data[index]) index=i;
e=l.data[index];
for(int i=index;i+1<l.length;i++) l.data[i]=l.data[i+1];
//标题需求是运用最终一个元素填充,审题严峻差错,粗心
l.length--;
return true;
}
答案:
bool del_min(sqlist&l,elemtype &value)
{
if(l.length==0) return false;
value = l.data[0];
int pos=0;
//这儿运用value这个变量进行数据暂存可以省掉,运用pos足矣
for(int i=1;i<l.length;i++)
if(l.data[i]<value)
{
value = l.data[i];
pos=i;
}
l.data[pos]=l.data[l.length-1];
l.length--;
return true;
}
018页2题
void reverse(sqlist&l)
{
elemtype temp;
int len=l.length;
if(len==0) return ;
//作为程序现已可以,作为纸质的答案,可以参阅最简练写法,但不一样不大
for(int i=0;i<=(len-1)/2;i++)
{
temp=l.data[i];
l.data[i]=l.data[len-i+1];//下标差错,fuck
l.data[len-i+1]=temp;
}
}
答案:
void reverse(sqlist&l)
{
elemtype temp;
for(int i=0;i<l.length;i++)
{
temp = l.data[i];
l.data[i]=l.data[l.length-i-1];
l.data[l.length-i-1]=temp;
}
}
018页3题
void deletex(sqlist &l,int n,elemtype x)//依照标题需求用了n
{
int k=0;
for(int i=0;i<n;i++)
if(l.data[i]!=x) l.data[k++]=l.data[i];
l.length=k;
}
答案:
void del_1(sqlist&l,elemtype x)
{
int k=0;
for(int i=0;i<l.length;i++)
if(l.data[i]!=x)
{
l.data[k]=l.data[i];
k++;
}
l.length=k;
}
void del_2(sqlist&l,elemtype e)
{
int k=0,i=0;
while(i<l.length)
{
if(l.data[i]==x) k++;
else l.data[i-k]=l.data[i];
i++;
}
l.length=l.length-k;
}
018页4题
bool del(sqlist&l,elemtype s,elemtype t)
{
//审题差错,标题是有序表
int k=0;
if(l.length==0) return false;
if(s>=t) return false;
for(int i=0;i<l.length;i++)
{
if(l.data[i]>=s && l.data[i]=<t) ;
else l.data[k++]=l.data[i];
}
l.length=k;
return true;
}
答案:
void del(sqlist &l,elemtype s,elemtype t)
{
int i,j;
if(s>=t || l.length==0) return false;
for(i=0;i<l.length&&l.data[i]<s;i++) ;
if(i>=l.length) return false;
for(j=i;j<l.length&&l.data[j]<=t;j++) ;
for(;j<l.length;j++,i++)
l.data[i]=l.data[j];
l.length=i;
return true;
}
018页5题
void del(sqlist&l,elemtype s,elemtype t)
{
int k=0,i=0;
if(l.length==0 || s>=t ) return false;
for(i=0;i<l.length;i++)
if(l.data[i]<s || l.data[i]>t)
l.data[k++]=l.data[i];
l.length=k;
return true;
}
答案:
bool del(sqlist&l,elemtype s,elemtype t)
{
int k=0,i=0;
if( l.length==0 || s>=t ) return false;
for(int i=0;i<l.length;i++)
if(l.data[i]>=s && l.data[i]<=t ) k++;
else l.data[i-k]=l.data[i];
l.length-=k;
return true;
}
018页6题
void removerepeat(sqlist&l)
{
int k=1;
if(l.length==0) return ;
for(int i=1;i<l.length;i++)
{
if(l.data[i]!=l.data[k-1])
l.data[k++]=l.data[i];
}
l.length=k;
}
答案:
bool delete_same(sqlist &l)
{
if(l.length==0) return false;
int i,j;
for(i=0,j=1;j<l.length;j++)
if(l.data[i]!=l.data[j])
l.data[++i]=l.data[j];
l.length=i+1;
return true;
}
018页7题
//回来数值可以建议运用引证类型
sqlist union(sqlist&l1,sqlist&l2)
{
sqlist l;
int i=0,j=0;
l.length=0;
while(i<l1.length && j<l2.length)
{
if(l1.data[i]<=l2.data[j]) l.data[l.length++]=l1.data[i++];
else l.data[l.length++]=l2.data[j++];
}
while(i<l1) l.data[l.length++]=l1.data[i];
while(j<l2) l.data[l.length++]=l2.data[j];
return l;
}
答案:
bool merge(sqlist a,sqlist b,sqlist &c)
{
// 自个没有进行这个判别,因为忽略了会超出规模这个差错
// 缘由:记住线性表的三个重要的元素
// 1.首地址2.存储空间的巨细3.表长
if(a.length+b.length>c.maxsize) return false;
//线性表处置需要留心存储空间的巨细

int i=0,j=0,k=0;
while( i<a.length && j<b.length )
{
if(a.data[i]<=b.data[j]) c.data[k++]=a.data[i++];
else c.data[k++]=b.data[j++];
}

while( i<a.length ) c.data[k++]=a.data[i++];
while( j<b.length ) c.data[k++]=b.data[j++];

c.length=a.length + b.length;
// c.length=k; 备用写法
return true;
}
018页8题
bool exchange(int a[],int m,int n)
{
// int b[]=new int[m+n];
int* b = (int*)malloc( (m+n) * sizeof(int) );

// 假定分配失利,回来false
if( b == null ) return false;

// 保存数据到b数组
for(int i=0;i<m+n;i++) b[i]=a[i];

// 把标题中的b1-bn 放到前面
for(int i=m;i<m+n;i++) a[i-m]=b[i];

// 把标题中的a1-am放到后边
for(int i=0;i<m;i++) a[i+n]=b[i];

return true;

}
答案:
typedef int datatype;
//考场不写typedef尽量,不形象
//这儿运用bool作为回来值非常好
void reverse(datatype a[],int left,int right,int arraysize)
{
if(left >= right || right >= arraysize ) return ;
int mid = (left+right)/2;
for(int i=0;i<=mid-left;i++)


{
datatype temp = a[left+i];
a[left+i]=a[right-i];
a[right-i]=temp;
}
}
void exchange(datatype a[],int m,int n,int arraysize)
{
reverse(a,0,m+n-1,arraysize);
reverse(a,0,n-1,arraysize);
reverse(a,n,m+n-1,arraysize);
}
018页9题
// 紧记三要素
bool find(sqlist &l,elemtype x)
{
if( l.length == 0 ) return false;

int left=0,right=l.length-1;
//这儿思考凌乱了,标题是找到,可是没有需求是第一个的!!!!!
while(left<=right)
{
int mid=(left+right)/2;
if(l.data[mid]<=x) l=mid+1;
if(l.data[mid]>x) r=mid-1;
}
//这儿的思路悉数错了,啥废物代码,我靠
if( l.data[right] == x )
{
// 假定是最终一个元素
if( right==l.length-1)
{
return false;
}
else
{
// 假定不能持续刺进数据
if( l.length>=l.maxsize ) return false;
else
{
//移动元素
for(int i=l.length;i>right;i--)
l.data[i]=l.data[i-1];
l.data[right]=x;
l.length++;
}
}
}
return true;
}
答案:
void searchexchangeinsert(elemtype a[],elemtype x)
{
// 这儿最佳可以有一个参数n
int low=0,high=n-1,mid;

while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==x) break;
else if( a[mid] > x ) low=mid+1;
else high = mid -1;
}

if(a[mid]==x && mid!=n-1)
{
elemtype temp=a[mid];
a[mid]=a[mid+1];
a[mid+1]=temp;
}

if(low>high)//阐明退出while循环不是因为break
{
for(int i=n-1;i>high;i--) a[i+1]=a[i];
a[i+1]=x;
}
}
018页10题
办法一:
bool reverse(elemtype a[],int l,int r)
{
if( l > r ) return false;

int mid=(l+r)/2;
for(int i=0;i<=mid-l;i++)
{
elemtype tmp;
tmp = a[left+i];
a[left+i]=a[right-i];
a[right-i]=tmp;
}
return true;
}
void leftp(elemtype a[],int n)
{
//没有答案那么的便利
reverse(a,0,n-1);
reverse(a,0,n-p-1);
reverse(a,n-p,n-1);
}
答案:
void reverse(int r[],int from,int to)
{
int i,temp;
for(i=0;i<(to-from+1)/2;i++)
{
temp=r[from+i],r[from+i]=r[to-i],r[to-i]=temp;
}
}
void converse(int r[],int n,int p)
{
reverse(r,0,p-1);
reverse(r,p,n-1);
reverse(r,0,n-1);
}
018页11题
// 时刻凌乱度0(n)
bool midnumber(elemtype a[],elemtypde b[],int m,int n,elemtype& ans)
{
if( n==0 || m == 0 ) return false;
int mid = (m+n+1) / 2 , cnt = 0 , i = 0 , j = 0 ;
while( i<m && j<n && cnt<mid )
{
if(a[i]<b[j])
{
cnt++;
if(cnt==mid) ans=a[i];
i++;
}
else
{
cnt++;
if(cnt==mid) ans=b[j];
j++;
}
}
while(i<m && cnt<mid )
{
cnt++;
if(cnt==mid) ans=a[i];
i++;
}
while(j<n && cnt<mid )
{
cnt++;
if(cnt==mid) ans=b[j];
j++;
}
return true;
}
答案:
int m_search(int a,int b,int n)
{
int s1=0 , s2=0 , d1=n-1 , d2=n-1 , m1 , m2;
while( s1!=d1 || s2!=d2 )
{
m1=(s1+d1)/2;
m2=(s2+d2)/2;
if(a[m1]==b[m2]) return a[m1];
else if(a[m1]<b[m2])
{
if( (d1-s1)%2 == 0 )
{
s1=m1;
d2=m2;
}
else
{
s1=m1+1;
d2=m2;
}
}
else if(a[m1]>b[m2])
{
if( (d2-s2)%2 == 0)
{
s2=m2;
d1=m1;
}
else
{
d1=m1;
s2=m2+1;
}
}
}
return a[s1]<b[s2]?a[s1]:b[s2];
}
018页12题
int find(int a[],int n)
{
if( n==0 ) return -1;

int* b = (int*)malloc( n * sizeof(int) );

for(int i=0;i<n;i++) b[i]=0;
for(int i=0;i<n;i++)
{
b[a[i]]++;
if(b[a[i]]>n/2) return a[i];
}
return -1;
}
答案:
int major(int a[],int n)
{
int i,c,count=1;
c=a[0];
for(i=1;i<n;i++)
{
if(a[i]==c) count++;
else
{
if(count>0) count--;
else
{
c=a[i];
count=1;
}
}
}
if(count>0)
{
for(i=count=0;i<n;i++)
if(a[i]==c) count++;
}
if(count>n/2) return c;
return -1;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

|京ICP备18012533号-296