以前落下的习题,现在补上!
#include<stdio.h>
#include<stdlib.h>#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTADD 10 //线性表存储空间的分配增量
#define TRUE 1
#define FALSE 0
#define ERROR -1typedef int ElemType;
typedef struct
{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的容量
}SqList , *Sqlist; //注意两者细微差别void InitList_Sq(Sqlist L) ;
int ListLength(SqList L) ;
int ListEmpty(SqList L) ;
void ListInsert(Sqlist L , int i , ElemType e) ;
ElemType GetElem(SqList L, int i, ElemType *e) ;
ElemType ListDelete(Sqlist L,int i,ElemType *e) ;
int LocateElem(SqList L,ElemType e) ;void Output( SqList B ) ;
void GetPowerSet( int i , SqList A , SqList *B ) ;
//void GetPowerSet( int i , SqList A , Sqlist B ) ;static int sign = 0 ;
#include "head.h"
void Output( SqList B )
{
int i ;++ sign ;
printf( "(%d):" , sign ) ;
for( i = 0 ; i < B.length ; ++ i )
{
printf( "%d " , B.elem[ i ] ) ;
}
if( !B.length )
printf( "空集" ) ;
printf( "\n" ) ;
}void GetPowerSet( int i , SqList A , SqList *B )
{ //线性表A表示集合A,线性B表示幂集p(A)的一个元素
ElemType x ;
int k ;if( i > ListLength( A ) )
Output( *B ) ; //输出当前B值,即P(A)的一个元素
else
{
GetElem( A , i , &x ) ;
k = ListLength( *B ) ;ListInsert( B , k + 1 , x ) ; GetPowerSet( i + 1 , A , B ) ;
ListDelete( B , k + 1 , &x ) ; GetPowerSet( i + 1 , A , B ) ;
}
}int main( )
{
SqList A , B ;
InitList_Sq( &A ) ;
InitList_Sq( &B ) ;ListInsert( &A , 1 , 1 ) ;
ListInsert( &A , 2 , 2 ) ;
ListInsert( &A , 3 , 3 ) ;GetPowerSet( 1 , A , &B ) ;
return 0 ;
}