分类: C/C++
2012-03-03 22:13:53
#include
#include
#define MAX 20
typedef int datatype ;
//定义顺序表
typedef struct
{
datatype data[MAX] ;
int last ;
}SeqList ;
//初始化
SeqList * Init_SeqList()
{
SeqList * L ;
L = (SeqList *)malloc(sizeof(SeqList)) ;
L->last = -1 ;
return L ;
}
//创建顺序表
void Creat_SeqList(SeqList * L)
{
datatype x ;
scanf("%d",&x) ;
while(x != 0)
{
L->last++ ;
L->data[L->last] = x ;
scanf("%d",&x) ;
}
}
//在第i位置插入数据x *******特别注意:在第i个位置插入是指在第ai的位置上插入元素,即在实际从0开始计数的i-1位置上插入元素*******************
void Insert_SeqList(SeqList * L , int i ,datatype x)
{
int j;
for(j=L->last ; j >=i-1; j--)
L->data[j+1] = L->data[j] ;
L->data[i-1] = x ;
L->last ++ ; //开始忘了写此句
}
//删除第i个位置的元素
void Delete_SeqList(SeqList * L , int i )
{
int j ;
for(j=i ;j<= L->last;j++ )
{
L->data[j-1] = L->data[j] ;
}
L->last-- ; //开始忘了写此句
}
int main()
{
SeqList * L ,* LA ,*LB , *LC;
datatype x ;
int i ,j ,k , a=0 ,b,c,d;
L = Init_SeqList() ;
printf("输入各个数字,建立顺序表\n") ;
Creat_SeqList(L) ;
printf("建立的顺序表为:\n") ;
for(i=0; i <= L->last; i++) //开始错写成for(i=0; i
printf("%d\n", L->data[i]) ; //开始错写成printf("%d", L->data[L->last]) ;
printf("在第几个位置插入数据:\n") ;
scanf("%d",&a) ; //在第a个位置插入数据
printf("插入的数据是:\n") ;
scanf("%d",&b) ;// 插入的数据是b
Insert_SeqList(L,a,b) ;
printf("插入后的顺序表:\n") ;
for(i=0; i <= L->last; i++)
printf("%d\n", L->data[i]) ;
printf("删除第几个元素:");
scanf("%d",&c) ;
Delete_SeqList(L,c) ;
printf("删除之后:\n") ;
for(i=0; i<=L->last; i++)
printf("%d\n",L->data[i]) ;
/* 有一线性表的顺序表示 (a1,a2,… ,an) ,设计一算法将该线性表逆置成逆线性表(an,an-1,… ,a1) 要求用最少的辅助空间 */
//建立表A
printf("请依次输入各数据,建立表A\n") ;
LA = Init_SeqList() ;//开始忘了写这句
Creat_SeqList(LA) ;
printf("表A是:\n") ;
for(i=0; i<=LA->last; i++)
printf("%d\n",LA->data[i]) ;
//将a1与an交换,a2与an-1交换……
j = LA->last ;
for(i=0 ; i <= (LA->last)/2 ; i++)
{
x = LA->data[i] ;
LA->data[i] = LA->data[j] ;
LA->data[j] = x ;
j -- ;
}
printf("逆向之后\n") ;
for(i=0; i<=LA->last; i++)
printf("%d\n",LA->data[i]) ;
/*有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列*/
LA = Init_SeqList() ;
LB = Init_SeqList() ;
printf("请按递增建立LA:\n") ;
Creat_SeqList(LA) ;
printf("请按递增建立LB:\n") ;
Creat_SeqList(LB) ;
LC = Init_SeqList() ;
i=0 ;
j=0 ;
while(i<=LA->last && j<= LB->last)
{
if(LA->data[i] <= LB->data[j])
{
LC->last ++ ;
LC->data[LC->last] = LA->data[i] ;
i++ ; //开始忘写
}
else
{
LC->last++ ;
LC->data[LC->last] = LB->data[j] ;
j++ ;//开始忘写
}
}
while(i<=LA->last)
{
LC->last ++ ;
LC->data[LC->last] = LA->data[i] ;
i++ ;//开始忘写
}
while(j<=LB->last)
{
LC->last ++ ;
LC->data[LC->last] = LB->data[j] ;
j++ ;//开始忘写
}
printf("----\n") ;
for(i=0 ; i <= LC->last; i++)
{
printf("%d\n",LC->data[i]) ;
}
return 1 ;
}