Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335188
  • 博文数量: 96
  • 博客积分: 2041
  • 博客等级: 大尉
  • 技术积分: 1080
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-20 14:08
文章分类

全部博文(96)

文章存档

2015年(2)

2013年(1)

2012年(93)

分类: 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 last; 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 ;
 
}

 

阅读(1628) | 评论(0) | 转发(0) |
0

上一篇:单击事件

下一篇:词汇积累

给主人留下些什么吧!~~