今天是本学期的第一堂马克思方面的课,因为一直还没去买书(以前认为学校在大一时发了),直到今天早上才知道上课了还没书,没见到那书到底啥样,所以连具体的名字的都不知道呵。
中午头晕晕的,再加上一直大雨,也难得跑出去去买,干脆来了个逃课,本学期的第一次。还不知道那老师长啥样了,听说是个“铁娘子”。
呆在宿舍也没什么事干,看了看《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;
}
#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;
}