C/C数据结构与算法/线性表的顺序储存
线性表的顺序储存
顺序表的特点:关系线性化、结点顺序存在
掌握其逻辑并不是一件难事,但实际编程中遇到的各种函数调用、参数传递、结构体类型的应用中出现的问题还是让我这个初学者的发量日益减少/流泪
一、顺序表的基本操作
1、输入一组整型元素序列,建立顺序表,元素的值随机输入;
2、实现该线性表的插入;
3、实现该线性表的删除;
4、实现该线性表的查找;
5、实现该线性表的排序(从小到大);
//查删改算法的时间复杂度都为O(n);
二、使用步骤
代码如下(可运行):
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100//线性表可能达到的最大长度
typedef struct{
int*elem; //线性表储存空间的基地址
int length; //线性表的实际长度
}SqList; //顺序表的结构类型为SqList
/*typedef与结构结合使用
定义一个新的结构类型
typedef为这个新的结构起了一个名字,叫SqLlist
*/
void Init_SeqList(SqList*L);
void Creat_SeqList(SqList*L,int n);
void output(SqList L);
int Insert_SeqList(SqList*L,int i,int e);
int Delete_SeqList(SqList*L,int i,int*e);
int LocateElem(SqList L,int e);
void Sort_SeqList(SqList*l);
void main()
{
SqList sl;
int len,i,elem,e;//len输入元素个数,e插入元素,i插入位置
Init_SeqList(&sl);
printf("请输入元素的个数:");
scanf("%d",&len);
Creat_SeqList(&sl,len);
output(sl);
printf("请输入插入位置:");
scanf("%d",&i);
printf("请输入插入的值:");
scanf("%d",&e);
if(Insert_SeqList(&sl,i,e))
output(sl);
else
printf("插入位置不合法!\n");
printf("请输入要删除的数据元素的位序:");
scanf("%d",&i);
if(Delete_SeqList(&sl,i,&e))
{
printf("被删除的数据元素为%d\n",e);
output(sl);
}
else
printf("删除位置不合法!\n");
printf("请输入要查找的数据元素的值:");
scanf("%d",&elem);
i=LocateElem_SeqList(sl,i,elem);
if(i)printf("所查找的元素在线性表中的序号为%d\n",i);
else printf("所查找的数据元素不存在!\n");
Sort_SeqList(&sl);
printf("排序后的线性表元素为:");
output(sl);
}
void Init_SeqList(SqList*L)
//顺序表初始化
{
L->elem=(int*)malloc(sizeof(int)*MAXSIZE);//分配初始空间
L->length=0;
}
void Creat_SeqList(SqList*L,int n)
//建立顺序表
{
int i;
if(n<1)//仍然是空表
{
return;
}
if(n>100)
n=100;//只输入前100个
printf("请输入%d个数据元素的值:",n);
for(i=0;i<n;i++)
scanf("%d",&L->elem[i]);
L->length=n;
}
void output(SqList L)
{
int i;
printf("线性表数据元素分别为:");
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
int Insert_SeqList(SqList*L,int i,int e)
{
/*在此嵌入你的代码*/
int k;
if(L->length>=100)
{
return 0;
}
if(i<1||i>L->length+1)
return 0;
for(k=L->length-1;k>=i-1;k--)
{
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;
L->length++;
return 1;
}
int Delete_SeqList(SqList*L,int i,int*e)
{
/*在此嵌入你的代码*/
if(i<1||i>L->length)
{
return 0;
}
*e=L->elem[i-1];
int k;
for(k=i;k<L->length;k++)
{
L->elem[k-1]=L->elem[k];
}
L->length--;
return 1;
}
int LocateElem_SeqList(SqList*L,int i,int e)
{
/*在此嵌入你的代码*/
i=L->length-1;
while(i>0&&L->elem[i]!=e)
{
i--;
}
return i;
}
void Sort_SeqList(SqList*L)
{
int i,j;
int lastExchangeIndex;
int temp;
i=L->length-1;
while(i>0)
{
lastExchangeIndex=0;
for(j=0;j<i;j++)
if(L->elem[j]>L->elem[j+1])
{
temp=L->elem[j+1];
L->elem[j+1]=L->elem[j];
L->elem[j]=temp;
lastExchangeIndex=j;//记下进行交换的记录位置
}//if
i=lastExchangeIndex;
}//while
}

是不是非常客来碗呢 hh
//如有错误不足之处还请各位指正教导
总结
基础不牢,地动山摇。顺序表是数据结构的入门,打好基础才能又快又好的跑程序,作者还需多多学习,希望以后再看到此文章的时候已经可以熟练运用顺序表了
关于error
1、expected declaration specifiers or ‘…’ before
原因:结构体声明有问题
2、expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘<’ token
原因:形如 include <stdio.h> 少#
void printSpace(int n);{} 多;
3、expected declaration or statement at end of input
原因:函数估计是放在main函数之后了,前面还没有声明
版权声明:本文为m0_48965230原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。