rc = 0;
if( 4 ) rc = L->size;
for( i = L->size - 1; i >= rc; i-- ) /* 将线性表元素后移 */ 5 L->list[rc] = item; L->size ++; return 0;
}
void OutputList( LIST *L ) /* 输出线性表元素 */ { int i; for( i = 0; 6 i++ ) printf( printf( }
int FindList( LIST *L, int item ) /* 返回 >=0 为元素位置 -1 没找到 */ { int i; for( i = 0; i < L->size; i++ ) if( 7 ) /* 找到相同的元素,返回位置 */ return i; return -1; /* 没找到 */ }
int DeleteList1( LIST *L, int item )
/* 删除指定元素值的线性表记录,返回>=0:删除成功 */ { int i, n; for( i = 0; i < L->size; i++ ) if( item == L->list[i] ) /* 找到相同的元素 */ break;
if( i < L->size ) { for( n = i; n < L->size - 1; n++ ) L->list[n] = L->list[n+1]; L->size --; return i;
}
5
return -1; }
int DeleteList2( LIST L, int rc ) /* 删除指定位置的线性表记录 */ {
8 /*编写删除指定位置的线性表记录子程序*/ }
程序2:题2
void main() { LIST LL;
int i, r; printf( ddr=%p\tsize=%d\tMaxSize=%d\nLL.list, LL.size, LL.MaxSize ); InitList( &LL, 100 ); printf( ddr=%p\tsize=%d\tMaxSize=%d\nLL.list, LL.size, LL.MaxSize ); while( 1 ) { printf( 请输入元素值,输入0结束插入操作: fflush( stdin ); /* 清空标准输入缓冲区 */ scanf( if( 1 ) break; printf( 请输入插入位置:
scanf(
InsertList( 2 ); printf( 线性表为: 3
}
while( 1 ) { printf( 请输入查找元素值,输入0结束查找操作:
fflush( stdin ); /* 清空标准输入缓冲区 */ scanf( if( i == 0 ) break;
r = 4 if( r < 0 ) printf( 没找到\n else
6
printf( 有符合条件的元素,位置为:%d\n}
while( 1 ) { printf( 请输入删除元素值,输入0结束查找操作: fflush( stdin ); /* 清空标准输入缓冲区 */
scanf( if( i == 0 ) break;
r = 5 if( r < 0 ) printf( 没找到\n else { printf( 有符合条件的元素,位置为:%d\n线性表为: OutputList( &LL ); } } while( 1 ) { printf( 请输入删除元素位置,输入0结束查找操作: fflush( stdin ); /* 清空标准输入缓冲区 */ scanf( if( r == 0 ) break;
i = 6 if( i < 0 ) printf( 位置越界\n else { printf( 线性表为: OutputList( &LL ); } } }
程序4:题4 #define X 10
#define Y 30 #define N 20
int A[N]={ 2, 5, 15, 30, 1, 40, 17, 50, 9, 21, 32, 8, 41, 22, 49, 31, 33, 18, 80, 5 };
7
#include
void del( int *A, int *n, int x, int y ) { int i, j; for( i = j = 0; i < *n; i++ ) if( A[i] > y || A[i] < x ) // 不在x到y之间,则保留 1 ; 2 = j; }
void output( int *A, int n ) { int i; printf( 数组有%d个元素:\n for( i = 0; i < n; i++ ) { printf( if( ( i + 1 ) % 10 == 0 ) printf( }
printf( }
void main() {
int n; n = N; output( A, n ); 3 ; output( A, n ); }
8
实验2 链表的基本操作
四、参考程序
程序1:题1 链表基本操作函数 #include
struct list *next; }LIST;
void InitList( LIST **p ) /* 初始化链表 */ {
1 /*编写初始化链表子程序*/ }
void InsertList1( LIST **p, int item, int rc ) /* 向链表指定位置[rc]插入元素[item] */ {
int i; LIST *u, *q, *r;
/* u:新结点 q:插入点前驱 r:插入点后继 */
u = ( LIST * )malloc( sizeof(LIST) ); u->data = item;
for( i = 0, r = *p ; 2 ; i++ ) { q = r; r = r->next; }
if( 3 ) /* 插入首结点或p为空指针 */ *p = u; else
4
u->next = r; }
void InsertList2( LIST **p, int item )
/* 向有序链表[p]插入键值为[item]的结点 */
9