离期末考试还有一个多月,打算系统复习一下数据结构。因为这段时间投入在数据结构上的时间基本没有。
所以掌握十分不牢固。现在贴段程序。希望园子里的朋友可以帮我解决一下指针的使用出的读写错误。
这是源码:
<!---->#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++版》实验一的目的是让学生深入理解线性表的顺序存储结构,并熟练掌握C++程序设计的基本技巧。在这个实验中,学生需要通过类的定义来实现线性表,数据对象的类型可以自定义。以下是实验涉及的主要知识点...
总结,理解和实现线性表的存储结构是学习数据结构和算法的基础,这有助于提升编程能力,解决实际问题。通过设计和测试源码,可以加深对线性表工作原理的理解,同时培养良好的编程习惯和调试技能。
小甲鱼的数据结构课程涵盖了多个重要的主题,包括线性表、二叉树、图的存储结构以及算法效率分析等。这些知识点在编程和软件开发中具有广泛的应用。 1. **线性表**:线性表是最基础的数据结构之一,由相同类型的...
《严蔚敏版数据结构算法源码(高一凡)》是针对计算机科学中的核心课程——数据结构与算法的一份重要学习资源。这份压缩包包含了高一凡老师编写的源代码,旨在帮助学习者深入理解和实践严蔚敏教授在教材中提出的各种...
在本实验源码包中,我们有六个针对不同数据结构的C语言实现,包括链表、图、二叉树、快速排序、开关案例和搜索算法。这些源码不仅提供了实际操作数据结构的实践经验,还有助于理解背后的理论概念。 1. **链表...
使用C++实现相关算法及其数据结构源码 List:线性表实现 数组实现 链表实现 StackAndQueue: 栈和队列实现 数组实现 链表实现 String: 串实现 数组实现 KMP算法 BinTree: 二叉树实现 数组实现 先序遍历 中序遍历 ...
数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。源码分析是学习这些概念的最直观方式,因为它们提供了实际实现的示例。在这个压缩包中,我们可能会找到用不同编程语言(如C++、Java或Python...
在《数据结构算法及解析》一书中,作者高一凡深入浅出地讲解了数据结构与算法的基础理论及其实际应用,旨在帮助读者建立坚实的计算机科学基础。以下是对该书核心知识点的深度解析: ### 一、数据结构概述 数据结构...
7. **遍历与打印**:遍历整个线性表并打印所有元素,是检查数据结构正确性的常见手段。 8. **错误处理**:在实现过程中,需要考虑如内存分配失败、超出数组范围等可能的错误情况,并提供相应的错误处理机制。 9. *...
2、已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母、数字和其它字符),设计算法构造三个以循环链表示的线性表,使每一个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的空间。...
本资源提供了C、C++、Java三种语言实现的基础数据结构和算法,涵盖了线性表、链表、队列、二叉树、图、查找和排序等多个核心概念。 1. **线性表**:线性表是最基本的数据结构之一,它包含一组逻辑上相邻的元素,...
线性表是计算机科学中一种基础且重要的数据结构,它是由n(n>=0)个相同类型元素构成的有限序列。在Java中实现线性表,通常会涉及到两种常见的存储方式:顺序存储和链式存储。 一、顺序存储结构 1. 数组实现:...
算法分析与设计和数据结构视频,不是那种理论知识,用案例讲解每个算法。 一共17讲,还有ppt和源码。
数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。本资料附带源码,意味着我们可以更深入地理解各种数据结构和算法的实际实现。以下将详细解释涉及的知识点: 一、线性表 线性表是最基础的...
首先,严蔚敏的《数据结构》是中国计算机教育的经典教材,书中详细介绍了各种基础和高级的数据结构,如线性表、栈、队列、链表、树、图、哈希表、排序和搜索算法等。这些数据结构是构建复杂软件系统的基础,它们在...
### 数据结构与算法 Python语言知识点概述 #### 一、引言 - **基本概念**: 数据结构与算法的基础概念,包括问题求解过程、交叉路口通行问题等。 - **算法复杂性**: 包括时间复杂度和空间复杂度的介绍,以及如何在...
线性表是计算机科学中一种基础且重要的数据结构,它是由n(n≥0)个相同类型元素构成的有限序列。在数据结构领域,线性表的存储方式主要有两种:顺序存储和链式存储。本篇文章将聚焦于顺序存储结构的线性表,并通过...
在IT领域,数据结构是计算机科学中的核心概念,它研究如何高效地组织和存储数据,以便于算法的执行。线性表是数据结构中最基础的一种,它由有限个相同类型元素构成的有序序列。本资源提供了线性表操作的C语言实现,...
本课程《算法数据结构体系学习班》专为初学者设计,旨在帮助学员系统地掌握算法与数据结构的基础知识,同时培养学员运用所学解决实际问题的能力。通过对经典算法和常用数据结构的学习,学员不仅能够理解其原理,还能...