7-1 顺序表的建立及遍历
# include <stdio.h>
# include <stdlib.h>
# define max 100
typedef struct {
int * data;
int length;
} sqlist;
int initlist ( sqlist * l)
{
l-> data= ( int * ) malloc ( max* sizeof ( int ) ) ;
l-> length= 0 ;
return 1 ;
}
void creatsq ( sqlist * l)
{
int n, i;
scanf ( "%d" , & n) ;
for ( i= 0 ; i< n; i++ )
{
scanf ( "%d" , & l-> data[ i] ) ;
l-> length++ ;
}
}
void printsq ( sqlist * l)
{
int i;
for ( i= 0 ; i< l-> length; i++ )
{
if ( i!= 0 ) printf ( " " ) ;
printf ( "%d" , l-> data[ i] ) ;
}
}
int main ( )
{
sqlist l;
initlist ( & l) ;
creatsq ( & l) ;
printsq ( & l) ;
return 0 ;
}
7-2 递增有序顺序表的插入
# include <stdio.h>
# include <stdlib.h>
# define max 100000
typedef struct {
int * data;
int length;
} list;
int initlist ( list * l)
{
l-> data= ( int * ) malloc ( max* ( sizeof ( int ) ) ) ;
l-> length= 0 ;
return 1 ;
}
void creatlist ( list * l)
{
int n, i;
scanf ( "%d" , & n) ;
for ( i= 0 ; i< n; i++ )
{
scanf ( "%d" , & l-> data[ i] ) ;
l-> length++ ;
}
}
int findlist ( list * l)
{
int x, i= 0 , j, p, len;
scanf ( "%d" , & x) ;
while ( i < l-> length && x >= l-> data[ i] )
{
i++ ;
}
p = i;
if ( ( i< 0 ) || ( i> l-> length+ 1 ) ) return 0 ;
if ( i == max) return 0 ;
for ( j= l-> length- 1 ; j>= p; j-- )
{
l-> data[ j+ 1 ] = l-> data[ j] ;
}
l-> data[ p] = x;
l-> length++ ;
return 1 ;
}
void printlist ( list * l)
{
int i;
for ( i= 0 ; i< l-> length; i++ )
{
if ( i!= 0 ) printf ( "," ) ;
printf ( "%d" , l-> data[ i] ) ;
}
printf ( "," ) ;
}
int main ( )
{
list l;
initlist ( & l) ;
creatlist ( & l) ;
findlist ( & l) ;
printlist ( & l) ;
}
7-3 顺序表(删除)
# include <stdio.h>
# include <stdlib.h>
# define max 1000
typedef struct {
int * data;
int length;
} list;
int initlist ( list * l) {
l-> data= ( int * ) malloc ( max* ( sizeof ( int ) ) ) ;
l-> length= 0 ;
}
void creatlist ( list * l) {
int n, i;
scanf ( "%d" , & n) ;
for ( i= 0 ; i< n; i++ ) {
scanf ( "%d" , & l-> data[ i] ) ;
l-> length++ ;
}
}
void delelist ( list * l)
{
int m, p, i, j, e;
j= l-> length;
scanf ( "%d %d" , & m, & p) ;
i = 0 ;
while ( i < j) {
if ( l-> data[ i] >= m && l-> data[ i] <= p) {
for ( e = i; e < j - 1 ; e++ ) {
l-> data[ e] = l-> data[ e + 1 ] ;
}
j-- ;
} else {
i++ ;
}
}
l-> length = j;
}
void printlist ( list * l) {
int i;
for ( i= 0 ; i< l-> length; i++ )
{
if ( i== 0 ) printf ( "%d" , l-> data[ i] ) ;
else printf ( " %d" , l-> data[ i] ) ;
}
}
int main ( )
{
list l;
initlist ( & l) ;
creatlist ( & l) ;
delelist ( & l) ;
printlist ( & l) ;
}
7-4 最大子列和问题
# include <stdio.h>
int main ( )
{
int n, i, ssum= 0 , qsum= 0 ;
scanf ( "%d" , & n) ;
int a[ n] ;
for ( i= 0 ; i< n; i++ )
scanf ( "%d" , & a[ i] ) ;
for ( i= 0 ; i< n; i++ ) {
ssum+= a[ i] ;
if ( ssum< 0 ) {
ssum= 0 ;
}
if ( ssum> qsum)
qsum= ssum;
}
if ( qsum< 0 ) printf ( "0" ) ;
else printf ( "%d" , qsum) ;
}
7-5 数组元素循环右移n位
# include <stdio.h>
# include <stdlib.h>
# define max 100
int main ( )
{
int n, m, i, j, p, t;
scanf ( "%d %d" , & n, & m) ;
int a[ max] ;
int b[ max] ;
for ( i= 0 ; i< n; i++ )
{
scanf ( "%d" , & a[ i] ) ;
}
p= m% n;
for ( i= 0 ; i< n; i++ )
{
b[ ( p+ i) % n] = a[ i] ;
}
for ( i= 0 ; i< n; i++ )
{
printf ( "%d " , b[ i] ) ;
}
}
7-6 单词逆置
# include <stdio.h>
# include <string.h>
int main ( )
{
long long int t;
scanf ( "%lld" , & t) ;
getchar ( ) ;
while ( t-- )
{
char a[ 81 ] ;
int i, j= 0 ;
int m, n= 0 ;
gets ( a) ;
int len= strlen ( a) ;
for ( i= 0 ; i< len; i++ )
{
if ( a[ i] == ' ' )
{
m= i;
for ( j= m- 1 ; j>= n && a[ j] != ' ' ; j-- )
{
printf ( "%c" , a[ j] ) ;
}
printf ( " " ) ;
n= m+ 1 ;
}
}
for ( j = len - 1 ; j >= n && a[ j] != ' ' ; j-- ) {
printf ( "%c" , a[ j] ) ;
}
printf ( "\n" ) ;
}
}
7-7 一元多项式的乘法与加法运算
# include <stdio.h>
# define max 10000
int a[ max] ;
int b[ max] ;
int mu[ max] ;
int sum[ max] ;
int main ( )
{
int m, n, i, j, cnt= 0 ;
scanf ( "%d" , & n) ;
int x, y;
while ( n-- ) {
scanf ( "%d %d" , & x, & y) ;
a[ y] = x;
}
scanf ( "%d" , & m) ;
int q, w;
while ( m-- ) {
scanf ( "%d %d" , & q, & w) ;
b[ w] = q;
}
for ( i= 0 ; i< max; i++ )
{
if ( a[ i] ) {
for ( j= 0 ; j< max; j++ ) {
if ( b[ j] ) {
mu[ i+ j] = mu[ i+ j] + a[ i] * b[ j] ;
}
}
}
}
for ( i= 0 ; i< max; i++ )
{
if ( a[ i] )
sum[ i] += a[ i] ;
}
for ( j= 0 ; j< max; j++ )
{
if ( b[ j] )
sum[ j] += b[ j] ;
}
cnt= 0 ;
for ( i= max- 1 ; i>= 0 ; i-- ) {
if ( mu[ i] ) {
if ( cnt!= 0 )
printf ( " " ) ;
printf ( "%d %d" , mu[ i] , i) ;
cnt++ ;
}
}
if ( cnt== 0 ) printf ( "0 0" ) ;
printf ( "\n" ) ;
cnt= 0 ;
for ( i= max- 1 ; i>= 0 ; i-- )
{
if ( sum[ i] ) {
if ( cnt!= 0 )
printf ( " " ) ;
printf ( "%d %d" , sum[ i] , i) ;
cnt++ ;
}
}
if ( cnt== 0 ) printf ( "0 0" ) ;
}
7-8 一元多项式的加法
# include <bits/stdc++.h>
# define ll long long
# define eb emplace_back
# define x first
# define y second
const int N = 1e7 + 10 ;
using namespace std;
map< ll, ll> ind;
vector< ll> res;
void solve ( ) {
int n;
cin>> n;
int a, b;
for ( int i= 1 ; i<= n; i++ ) {
cin>> a>> b;
ind[ b] += a;
}
cin>> n;
for ( int i= 1 ; i<= n; i++ ) {
cin>> a>> b;
ind[ b] += a;
}
for ( auto i: ind) {
if ( i. y) {
res. eb ( i. x) ;
res. eb ( i. y) ;
}
}
if ( res. size ( ) ) {
for ( int i= res. size ( ) - 1 ; i>= 0 ; i-- ) {
if ( i!= res. size ( ) - 1 ) cout<< " " ;
cout<< res[ i] ;
}
cout<< endl;
} else cout<< "0 0" << endl;
}
int main ( ) {
ios:: sync_with_stdio ( 0 ) ;
cin. tie ( 0 ) ;
cout. tie ( 0 ) ;
solve ( ) ;
return 0 ;
}
7-9 合并有序数组
# include <stdio.h>
int main ( )
{
int n, m;
scanf ( "%d" , & n) ;
int a[ n] ;
for ( int i = 0 ; i < n; i++ )
scanf ( "%d" , & a[ i] ) ;
scanf ( "%d" , & m) ;
int b[ m] ;
for ( int i = 0 ; i < m; i++ )
scanf ( "%d" , & b[ i] ) ;
int w[ n + m] ;
int i = 0 , j = 0 , k = 0 ;
while ( i < n && j < m) {
if ( a[ i] <= b[ j] ) {
w[ k++ ] = a[ i++ ] ;
} else {
w[ k++ ] = b[ j++ ] ;
}
}
while ( i < n) {
w[ k++ ] = a[ i++ ] ;
}
while ( j < m) {
w[ k++ ] = b[ j++ ] ;
}
for ( int i = 0 ; i < n + m; i++ ) {
printf ( "%d " , w[ i] ) ;
}
return 0 ;
}