离期末考试还有一个多月,打算系统复习一下数据结构。因为这段时间投入在数据结构上的时间基本没有。
所以掌握十分不牢固。现在贴段程序。希望园子里的朋友可以帮我解决一下指针的使用出的读写错误。
这是源码:
<!---->#include <iostream>
#define Max 100
using namespace std;
typedef int datatype;
/*线性表结构*/
typedef struct SeqList{
datatype data[Max];
int last;
} SeqList;
/*初始化*/
SeqList * init_SeqList()
{
SeqList *L; int i;
L=new SeqList;
cout<<"请输入顺序表的长度"<<endl;
cin>>L->last;
L->last--;
cout<<"请输入顺序表的内容"<<endl;
for(i=0;i<=L->last;i++)
cin>>L->data[i];
return L;
}
/*读取*/
void Print(SeqList *L)
{
int i;
cout<<"顺序表内容为:"<<endl;
for(i=0;i<=L->last;i++)
cout<<L->data[i]<<endl;
}
/*从小到大排序*/
void Part(SeqList *L)
{
int i,j;
datatype t;
for(j=0;j<=L->last;j++)
{ for (i=0;i<L->last-j;i++)
if (L->data[i]>L->data[i+1])
{ t=L->data[i];
L->data[i]=L->data[i+1];
L->data[i+1]=t;}
}
}
/*插入*/
int Insert(SeqList *L,int i,datatype x){
int j;
if(L->last>Max-1){
cout<<"表满"<<endl;
return -1;
}
if(i<1||i>L->last+2){
cout<<"插入位置错误!插入失败"<<endl;
return 0;
}
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++;
return 1;
}
/*删除*/
int Delete(SeqList *L,int i){
int j;
if(i<1||i>L->last+1){
cout<<"不存在第i个元素"<<endl;
return 0;
}
for(j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
return 0;
}
/*按值查找*/
int Location(SeqList *L,datatype x){
int i;
i=0;
while(i<=L->last&&L->data[i]!=x){
i++;
if(i>L->last){
return -1;
}
}
return i+1;
}
/*线性表合并*/
void Merge(SeqList *A,SeqList *B,SeqList *C){
int i,j,k;
i=0;
j=0;
k=0;
while(i<=A->last && j<=B->last)
if(A->data[i]<B->data[j])
C->data[k++]=A->data[i++];
else
C->data[k++]=B->data[j++];
while(i<=A->last)
C->data[k++]=A->data[i++];
while(j<=B->last)
C->data[k++]=B->data[j++];
C->last=k;
}
/*两个线性表的比较*/
int Compare(int A[],int B[],int m,int n){
int i,j,AS[100],BS[100],ms,ns;
i=0;
ms=ns=0;
while(i<=m && i<=n && A[i]==B[i])
i++;
for(j=i;j<m;j++){
AS[j=i]=A[j];
ms++;
}
for(j=i;j<n;j++){
BS[j-i]=B[j];
ns++;
}
if(ms==ns&&ms==0)
return 0;
else
if(ms==0&&ns>0||ms>0&&ns>0&&AS[0]<BS[0])
return -1;
else
return 1;
}
/*线性表转化成数组*/
int Change(SeqList *L){
int i;
int a[L->last];
for(i=0;i<L->last;i++)
a[i]=L->data[i];
return a[L->last];
}
/*主函数*/
int main()
{
int into;
int del;
int result;
int a[100];
int b[100];
datatype find;
datatype num;
SeqList *L;
SeqList *L2;
SeqList *L3;
L=init_SeqList();
cout<<"您输入的";
Print(L);
Part(L);
cout<<"从小到大排序后的";
Print(L);
cout<<"请输入您要插入的数:"<<endl;
cin>>num;
cout<<"请输入您要插入的位置:"<<endl;
cin>>into;
Insert(L,into,num);
cout<<"插入后的";
Print(L);
cout<<"请输入您要删除的元素位置:"<<endl;
cin>>del;
Delete(L,del);
Print(L);
cout<<"请输入您要查找的数"<<endl;
cin>>find;
cout<<"您查找的数在第"<<Location(L,find)<<"位"<<endl;
cout<<"输入第二个线性表:"<<endl;
L2=init_SeqList();
cout<<"您输入的";
Print(L2);
Part(L);
Part(L2);
Merge(L,L2,L3);
cout<<"两个从小到大线性表合并后的";
Print(L3);
cout<<"线性表转化成数组"<<endl;
a[100]=Change(L);
b[100]=Change(L2);
int *x;
int *y;
x=&a[100];
y=&b[100];
cout<<"两个线性表的比较"<<endl;
result=Compare(x,y,L->last,L2->last);
if(result=1){
cout<<"A线性表大于B线性表"<<endl;
}else if(result=0){
cout<<"A线性表等于B线性表"<<endl;
}else if(result=-1){
cout<<"A线性表小于B线性表"<<endl;
}
return 0;
}
编译可以通过,但是合并线性表这里有问题,而且两个线性表的比较也不成功,希望朋友可以帮忙看看。谢谢!
基础不牢,见笑了。
分享到:
相关推荐
c数据结构基本算法-线性表存储的设计与测试 提供了c语言数据结构中最基本的算法--线性表存储的源码,主要包含 1. 设计源码; 2. 测试源码。 编译平台vs2015,经测试,运行正常。
2、已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母、数字和其它字符),设计算法构造三个以循环链表示的线性表,使每一个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的空间。...
算法分析与设计和数据结构视频,不是那种理论知识,用案例讲解每个算法。 一共17讲,还有ppt和源码。
数据结构,包括了线性表,队列,二叉树,图等 各种排序算法
《数据结构与算法分析:Java语言描述 第2版 》是国外数据结构与算法分析方面的经典教材 使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计) 随着计算机速度...
根据数据结构-严蔚敏书籍的第2章节的2.1节的算法2-1和2-2编写代码实现验证。采用clion工具验证。 int InitList(List *L); int compare(ElemType x, ElemType y); void union_list(List *pa, List *pb); int ...
基础的数据结构和算法C、C++、Java实现,有线性表、链表、队列、二叉树、图、查找、排序等等,全是最标准的实现,可以用来学习也可以直接使用。用来学习的话,里边有每种算法一步一步实现的图片,更加清晰。
VC++数据结构经典算法源码 二分查找1.c 二分查找2.c 二叉树.c [其它] [单元加] 单循环链表.c 单链表.c 图.c [字符] 定长串.c [小写数字转为大写数字] 带头结点双链循环线性表.c [底层编程] [效验算法] [数学问题] ...
北大数据结构与算法POJ上机作业源码,线性表章节
绝对物超所值,附源代码(你懂的) 线性表,栈,队列,递归,迭代,分治,数齐全
包含各种数据结构和算法的集合,如线性表(顺序和链式)、队列(顺序和链式)、栈(顺序和链式)、树(顺序和链式、遍历、线索)、图(邻接矩阵、邻接表)、排序、插找,很全面!
小甲鱼数据结构课件+代码 绪论/算法 时间/空间复杂度 线性表 栈和队列 递归和分治 字符串 KMP算法 树 图 查找&排序
《算法与数据结构 第_2_章_线性表.ppt
API接口定义与使用方法请参考书中每一章的ADT List,源码可以使用DEVC++直接编译运行。 实现内容: 第二章 - 线性表、单链表、静态单链表 第三章 - 链队列、循环队列、栈、栈链、离散时间模拟 第五章 - 广义表 第六...
本实验资源内附详细的指导教程和演示案例,通俗易懂,由艾孜尔江·艾尔斯兰亲自实验并撰著而成,均为底层开发,可供研究和学习使用,平时工作中亦可实践,是初学者深入学习数据结构与算法的法宝,基于C++语言实现,...
数据结构讲义(严蔚敏版)(含算法源码) 1. 经典算法 单链表:遍历、插入、删除 循环队列:队列空、队列满的条件 二叉树:递归遍历及应用 有序表的二分法查找 快速排序 简单选择排序 2. 绪论 掌握几个重要概念 数据...
一:序言.ppt 二:线性表.ppt 三:栈和队列.ppt 四:数组.ppt 五:树.ppt 六:图.ppt 七:查找.ppt 八:排序.ppt 数据结构程序实习报告.doc
本书使用C#语言及面向对象的方法介绍了数据结构的基础知识,并针对数据结构中的难点及关键点,配套了视频教程,使用动画加讲解的方式对数据结构及算法进行了详细地介绍。 全书共分10章,第1-6章主要介绍了线性表、...
排序算法、链表、排序、线性表、栈、栈和队列、最佳置换法源码。。内容齐全,需要的及时下载哦
根据数据结构-严蔚敏书籍的第2章节的2.2节的算法2-1至2-7编写代码实现验证。采用clion工具验证 int InitList_Sq(SqList *L); int ListInsert_Sq(SqList *L, int i, ElemType e); int ListDelete_Sq(SqList *L, int i...