数据结构——线性表

来源:互联网 发布:多益网络前端待遇 编辑:程序博客网 时间:2024/05/01 06:39
今天是本学期的第一堂马克思方面的课,因为一直还没去买书(以前认为学校在大一时发了),直到今天早上才知道上课了还没书,没见到那书到底啥样,所以连具体的名字的都不知道呵。
中午头晕晕的,再加上一直大雨,也难得跑出去去买,干脆来了个逃课,本学期的第一次。还不知道那老师长啥样了,听说是个“铁娘子”。
呆在宿舍也没什么事干,看了看《C++ primer》的前几章,没学过的东西太多了,这学期啃书本的日子还长着呢?最终还是决定拿起数据结构编下书上的东西,复习一下,感觉上学期自己不够重视这门课呵。没有达到自己想要的效果。现在有空就复习下它咯。对于像我这样的,还是一步步来学吧。。先是线性表:
#include <iostream>
#include <stdlib.h>
#include<malloc.h>
#define  LIST_INIT_SIZE 100
#define  LISTINCREMENT 10
typedef  struct{
 int  *elem;   //存储空间基址
 int length;   //当前长度
 int  listsize;//分配容量
 }sqlist;
 
 
 void InitList(sqlist &L)
  {
   /*线性表的初始化*/
   L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
   if(!L.elem)  exit(0);
   L.length=0;
   L.listsize=LIST_INIT_SIZE;
  }//////////INitlist
 
 
 void  Creatlist(sqlist &L)
  {
   /*线性表的建立*/
   int  i,n;
   i=0;
   cin>>n;   //线性表的数据以输入的数据为-1时结束
   while(n!=-1)
    {
     L.elem[i++]=n;
     L.length++;
     cin>>n;  
     }
   L.listsize=L.length;
  } ///////////Creatlist
 
 
  void sortlist(sqlist &L)
  {
   /*线性表的排序*/
  int  i,j,temp;
   for(i=0;i<L.length-1;i++)
     for(j=i+1;j<L.length;j++)
      if(L.elem[i]>L.elem[j])
       {temp=L.elem[i];
        L.elem[i]=L.elem[j];
        L.elem[j]=temp;
        } 
   }  //////////sortlist
  
  
  void Insertlist(sqlist &L,int  e)
  {
   /*有序线性表的插入*/
   int  i,j;
   for(i=0;i<L.length&&L.elem[i]<e;i++);
    if(i>=L.length)  L.elem[i]=e;
    else
     {//插入位置在线性表中
       for(j=L.length;j>i;j--)
         L.elem[j]=L.elem[j-1];
         L.elem[j]=e;    
     }
    L.length++;
    L.listsize=L.length; 
 
  }/////////INitlist
 
 
  void  deletelist(sqlist &L,int  e1)
  {
   /*线性表的删除*/
    int i,j;
    for(i=0;i!=L.length&&L.elem[i]!=e1;i++);
     if(i==L.length)  cout<<"要删除的数据在该线性表中不存在,请核对数据"<<endl;
     else
       {
       for(j=i;j<L.length-1;j++)
        L.elem[j]=L.elem[j+1];
        L.length--;
        L.listsize=L.length;
      
       }
  }/////deletelist
 
 
  void  mergelist(sqlist A,sqlist B,sqlist &C)
   {
   /*线性表的归并*/
     int  i,j,k;
     i=j=k=0;
     while(i!=A.length&&j!=B.length)
      {
        if(A.elem[i]>B.elem[j])  {C.elem[k++]=B.elem[j];j++;}
        else   {C.elem[k++]=A.elem[i];i++;}     
      }  
   
     while(i!=A.length)
      {
      C.elem[k++]=A.elem[i];
      i++;
      }
     
      while(j!=B.length)
        {
      C.elem[k++]=B.elem[j];
      j++;
      }
      
     C.length=k;
     C.listsize=C.length; 
  
   }//////////////mergelist
 
  
  void printlist(sqlist L)
   {
   /*线性表的输出*/
   int  i;
     for(i=0;i<=L.length-1;i++)
       cout<<L.elem[i]<<" ";
      cout<<endl;
   } ////////printlist
 
 
int main(int argc, char *argv[])
{
  sqlist A,B,C;
   int e,e1;
   cout<<"输入要插入的数据:";
   cin>>e;
   cout<<"输入要删除的数据"<<endl;
   cin>>e1;
  InitList(A);
  InitList(B);
  InitList(C);
   cout<<"请输入第一个线性表的数据:"<<endl;
  Creatlist(A);
  sortlist(A);
   cout<<"第一个线性表的数据为:"<<endl;
   printlist(A);
   cout<<"请输入第二个线性表的数据:"<<endl;
  Creatlist(B);
  sortlist(B);
   cout<<"第二个线性表的数据为:"<<endl;
   printlist(B);
   mergelist(A,B,C);
   cout<<"归并后的线性表中的数据为:"<<endl;
   printlist(C);
   cout<<"输出插入前的数据:"<<endl;
   printlist(C);
   Insertlist(C,e);
   cout<<"输出插入后的数据:"<<endl;
   printlist(C);
    cout<<"输出删除前的数据:"<<endl;
   printlist(C);
   deletelist(C,e1);
    cout<<"输出删除后的数据:"<<endl;
   printlist(C);
  
  
  system("PAUSE"); 
  return 0;
}