算法与数据结构之顺序表顺序表

著名的计算机科学家N.Wirth教授曾提出一个公式:算法+数据结构=程序

“数组”类型表示顺序存储结构,用指针来表示链式存储结构。指针p指向下一个对象单元,p的值不是一增加1,而是增加对象类型所占的字节数。

一个结构提示类型student,没有定义变量,就不会分配存储单元,不能再程序中直接访问结构体类型名。

线性表是N个具有相同特性的数据元素的有限序列。线性表分为 顺序存储结构和链式存储结构。

顺序表:

/*顺序表的建立与输出*/

#include<stdio.h>
#include<malloc.h>
#include<windows.h>

#define maxsize 50

typedef int elemtype;

typedef struct //定义顺序表的存储类型
{
elemtype data[maxsize];
int length;
}sqlist;

void createlist(sqlist *&L,elemtype a[],int n)//建立顺序表
{
int i;
L=(sqlist *)malloc(sizeof(sqlist));    /* 这里定义了一个结构体指针,并且分配内存  */
for(i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
void displist(sqlist *L) //输出顺序表
{
int i;
for(i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("\n");
}

void listempty(sqlist *L) //判断线性表是否为空
{
int m;
m=L->length;
if(m!=0)
printf("此线性表不为空\n");
else
printf("此为空线性表\n");
}

void listlength(sqlist *L) //求线性表的长度
{
int m;
m=L->length;
printf("此线性表的长度为: %d\n",m);
}

void getelem(sqlist *L) //从顺序表中取值
{
int i,e;
printf("请输入需取第几位元素: ");
scanf("%d",&i);
if(i<1||i>L->length)
printf("输入错误");
else
{ e=L->data[i-1];
printf("取值成功第%d位元素为:%d\n",i,e);
}
}

void locateelem(sqlist *L) //在顺序表中查找元素
{
int e,i=0;
printf("请输入需查找元素:");
scanf("%d",&e);
while(i<L->length&&L->data[i]!=e)
i++;
if(i>=L->length)
printf("不存在此元素\n");
else
printf("此元素在第%d位\n",i+1);
}

void listinsert(sqlist *&L) //插入元素 
{
int i,j,e;
printf("请输入插入位置:");
scanf("%d",&i);
if(i<1||i>L->length+1)
printf("输入错误\n");
else
{
printf("请输入需插入元素:");
scanf("%d",&e);
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
printf("插入成功\n");
}

}

void listdelete(sqlist *&L) //删除元素
{
int i,j,e;
printf("请输入需删除元素位置:");
scanf("%d",&i);
if(i<1||i>L->length+1)
printf("输入错误\n");
else
{
i--;
e=L->data[i];
for(j=i+1;j<L->length;j++)
L->data[j-1]=L->data[j];
L->length--;
printf("已删除%d元素\n",e);
}

}

void main()
{
sqlist *q;
int i,m,n=10,a[10];
printf("请输入10个数组元素:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
createlist(q,a,n);
printf("顺序表建立完毕\n");
while(1)
{
printf("请选择:");
printf(" 1.输出链表\n");
printf(" 2.判断线性表是否为空\n");
printf(" 3.求线性表的长度\n");
printf(" 4.从顺序表中取值\n");
printf(" 5.在顺序表中查找元素\n");
printf(" 6.插入元素\n");
printf(" 7.删除元素\n");
printf(" 8.退出\n");
scanf("%d",&m);
switch(m)
{ case 1:displist(q);break;
case 2:listempty(q);break;
case 3:listlength(q);break;
case 4:getelem(q);break;
case 5:locateelem(q);break;
case 6:listinsert(q);break;
case 7:listdelete(q);break;
case 8:exit(0);
default:printf("输入错误\n");
}
}
}

时间: 2024-10-30 04:51:37

算法与数据结构之顺序表顺序表的相关文章

c++-请问谁有数据结构(C++)顺序表的源代码

问题描述 请问谁有数据结构(C++)顺序表的源代码 输入几个数,然后实现由小到大的排列,之后再第一个数和第二个数之间插入一个数 解决方案 http://blog.csdn.net/ristal/article/details/5915097 解决方案二: 数据结构电话号码本源代码(顺序表)数据结构 顺序表的操作(源代码)数据结构之顺序表

数据结构Java实现02----线性表与顺序表

[正文] 本节内容: 线性结构 线性表抽象数据类型 顺序表 顺序表应用   一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有后继数据元素. 则称这样的数据结构为线性结构.   二.线性表抽象数据类型: 1.线性表抽象数据类型的概念: 线性表抽象数据类型主要包括两个方面:既数据集合和该数据集合上的操作集合. 数据集合: 可以表示为a0,a1,a2,

浅谈算法和数据结构 十一 哈希表

在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度: 可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度. 那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table) 什么是哈希表 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 哈希的思路很简单

C#实现顺序表(线性表)完整实例_C#教程

本文实例讲述了C#实现顺序表(线性表)的方法.分享给大家供大家参考,具体如下: 基本思想是使用数组作为盛放元素的容器,数组一开始的大小要实现确定,并使用一个Pointer指向顺序表中最后的元素.顺序表中的元素是数组中元素的子集.顺序表在内存中是连续的,优势是查找,弱势是插入元素和删除元素. 为避免装箱拆箱,这里使用泛型,代替object.使用object的例子可以参照本站这篇文章:http://www.jb51.net/article/87603.htm,这个链接中的例子实现的是队列,并没 有使

浅谈算法和数据结构 六 符号表及其基本实现

前面几篇文章介绍了基本的排序算法,排序通常是查找的前奏操作.从本文开始介绍基本的查找算法. 在介绍查找算法,首先需要了解符号表这一抽象数据结构,本文首先介绍了什么是符号表,以及这一抽象数据结构的的API,然后介绍了两种简单的符号表的实现方式. 一符号表 在开始介绍查找算法之前,我们需要定义一个名为符号表(Symbol Table)的抽象数据结构,该数据结构类似我们再C#中使用的Dictionary,他是对具有键值对元素的一种抽象,每一个元素都有一个key和value,我们可以往里面添加key,v

c++-C++数据结构与算发线性表List问题。

问题描述 C++数据结构与算发线性表List问题. 看<数据结构与算法分析>,用书上的代码创建线性表的顺序表. 可是编译出现错误,求解答. AList.h #include <list> template < class Elem > class AList : public List<Elem> { private: int maxSize; int listSize; int fence; Elem* listArray; public: AList(i

c语言-@C语言数据结构大神:顺序栈求n!。13行的错误怎么修改?为啥说我定义栈错误?

问题描述 @C语言数据结构大神:顺序栈求n!.13行的错误怎么修改?为啥说我定义栈错误? # include<stdio.h> # include<stdlib.h> # define Max_Size 50 typedef struct{//typedef是小写开头! //注意此处的top是整形指针 int data[Max_Size]; int top; }SeqStack,*PSeqStack; void Init_SeqStack(PSeqStack S) { S->

021_《Delphi算法与数据结构》

<Delphi算法与数据结构> Delphi 教程 系列书籍 (021) <Delphi算法与数据结构> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 附书源码     原书名: The Tomes of Delphi Algorithms and Data Structures 原出版社: Wordware Publishing 作者: [美]Julian Bucknall 译者: 林琪 朱涛江 丛书名: Delphi技术系列 出版社:中国电力

PHP常用算法和数据结构示例(必看篇)

实例如下: </pre><pre name="code" class="php"><?php /** * Created by PhpStorm. * User: qishou * Date: 15-8-2 * Time: 上午9:12 */ header("content-type:text/html;charset=utf-8"); $arr = array(3,5,8,4,9,6,1,7,2); echo im

Activiti数据库表结构(表详细版)

Activiti数据表结构 1  Activiti数据库表结构 1.1      数据库表名说明     Activiti工作流总共包含23张数据表,所有的表名默认以"ACT_"开头. 并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配. u  ACT_GE_* : "GE"代表"General"(通用),用在各种情况下: u  ACT_HI_* : "HI"代表"History