前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构算法整理-01-顺序表

数据结构算法整理-01-顺序表

作者头像
devi
发布2021-08-18 15:39:28
2410
发布2021-08-18 15:39:28
举报
文章被收录于专栏:搬砖记录
在这里插入图片描述
在这里插入图片描述

1. 定义顺序表

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 20

typedef int datatype;

typedef struct list{
	datatype data[MaxSize];  //MaxSize 是顺序表总长度-数组总元素个数 
	int length;  //  顺序表的当前长度 
}sequenlist;

2. 通过已知数组元素创建顺序表

代码语言:javascript
复制
//通过已知数组元素创建顺序表  
void creatlist( sequenlist  *seqlist )
{	int i;
	int a[10]={34,23,67,43,23,87,23,67,92,12};
	seqlist->length =0;
	for(i=1;i<=10;i++)
	{
		if(Insert(seqlist,i,a[i-1])==-1) printf("error!\n");
	}
}

3. 通过键盘输入创建顺序表

代码语言:javascript
复制
//通过键盘输入创建顺序表 
void creatlist2( sequenlist  *seqlist )
{	int i;int n; 
	datatype x;
	seqlist->length =0;
	printf("请输入要输入的元素个数:");
	scanf("%d",&n);
	printf("请输入各元素的值:");
	for(i=1;i<=n;i++)
	{
		scanf("%d",&x);
		if(Insert(seqlist,seqlist->length+1 ,x)==-1) printf("error!\n");
	}
}

4. 显示顺序表中所有元素的值

代码语言:javascript
复制
//显示顺序表中所有元素的值  
void displaylist(sequenlist   *seqlist)
{	int i;
	
	// 判断是否是空表 
	if(seqlist->length<=0) 
	{
		printf("抱歉,目前表中没有元素!");
		return ;
	}
	// 若是非空表,则输出各元素 
	printf("目前的数据元素有:");
	for(i=0;i<seqlist->length;i++)
	{
		if(i%10==0) 	printf("\n");
		printf("%d   ",seqlist->data[i]);
	}
	printf("\n\n");
}

5. 在指定位置插入

代码语言:javascript
复制
//在位置index位置上插入值为x的元素 ,插入异常则返回-1 
int Insert(sequenlist  *seqlist, int index, datatype x)
{
      int j;
	  if (seqlist->length>=MaxSize) return -1;
      if (index<1 || index>(seqlist->length+1)) return -1;
      for (j=seqlist->length; j>=index; j--)
           seqlist->data[j]=seqlist->data[j-1]; 
      seqlist->data[index-1]=x;
      seqlist->length++;
	  return 1;
}

6. 删除指定位置元素

代码语言:javascript
复制
//删除位置index上的元素 
int Delete(sequenlist  *seqlist, int index)
{
      int j;
	  if (seqlist->length<=0) return -1;
      if (index<1 || index>(seqlist->length)) return -1;
      for (j=index; j<=seqlist->length; j++)
           seqlist->data[j-1]=seqlist->data[j]; 
      
      seqlist->length--;
	  return 1;
}

7. 查看指定位置元素

代码语言:javascript
复制
//查看位置index上的元素的值 
datatype getItem(sequenlist *seqlist, int index)
{
	if (index>=1 && index<=(seqlist->length))
		return (seqlist->data[index-1]);
}

8. 查找指定元素

代码语言:javascript
复制
//查找值为x的元素是否存在,若存在返回其位置,否则给出提示信息 
int Locate(sequenlist  *seqlist, datatype x)
{
	int i;  //下标 
	for (i=0; i<seqlist->length; i++)
         if (seqlist->data[i]==x) return (i+1); 
     return 0;          
}

记忆小结

本系列所指的“位置”,都是按日常习惯,从1开始。

  1. 顺序表虽然是数组实现的,但实际上是在结构体中保存的数组和长度
  2. 插入算法:先将插入位置后的所有元素逐一后移,然后插入。
  3. 插入位置不合法: a. seqlist->length >= MaxSize 表满 b. index<1 || index > (seqlist->length+1) 小于1显然不合法,超出实际长度后两个显然也不行
在这里插入图片描述
在这里插入图片描述

4. 删除算法:将被删除位置之后的元素逐一往前覆盖

5. 删除位置不合法 a. seqlist->length < 1 表空 b. index<1 || index>(seqlist->length) 小于1肯定不合法,超出表长自然也不合法

6. 凡是涉及用户输入的,都需要对用户输入进行合法性检验

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 定义顺序表
  • 2. 通过已知数组元素创建顺序表
  • 3. 通过键盘输入创建顺序表
  • 4. 显示顺序表中所有元素的值
  • 5. 在指定位置插入
  • 6. 删除指定位置元素
  • 7. 查看指定位置元素
  • 8. 查找指定元素
  • 记忆小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档