数据结构中构建顺序表

顺序表指的是数据元素在内存中连续分配地址的数组,由于指针无法指出数组长度,编译时不会报错,所有用结构体来表示一个顺序表:

顺序表用C语言的表示方法如下:

<span style="font-family: Arial, Helvetica, sans-serif;">  #define OK 1</span>
  #define ERROR -1
  typedef int elem_type;
  typedef int Statue;
 //  int Arrylength;
   typedef struct sqlist
   {
   	elem_type  *Arry;
   	int  Arrylength;
   	} Sqlist;

   //建立一个空表
  Statue Create_Sqlist(Sqlist *&S)
   {
    //S->Arry = (elem_type *) malloc(MaxSize*sizeof(elem_type));

	//L = (sqlist *)malloc(sizeof(sqlist));
   // L->data = (char *)malloc(maxsize);
    S = (Sqlist *)malloc(sizeof(Sqlist));
	S->Arry = (elem_type *)malloc(MaxSize);
   	if(!S->Arry)
   		{
   			return ERROR;
   			}
   	else
   		{
   			S->Arrylength = 0;
   			return OK;
	    }
   	}

//顺序表赋初始值
  void   Init_Sqlist(Sqlist *&S)
  {
  	int i;
  	for(i=0;i<20;i++)
  	{
  	   S->Arry[i]=rand()%100;

  	   S->Arrylength++;
  	 }
  }

//在第i个位置添加一个元素m
  Statue Insert_Sqlist(Sqlist *&S,int i,int InsertNum)
{
  	if(i<=0 && i>S->Arrylength)
  		return ERROR;
  	else
  		{
  			int j;
  			for(j=0;j<=S->Arrylength-i;j++)
  			 S->Arry[S->Arrylength-j]=S->Arry[S->Arrylength-1-j];    //i以后元素往后移动一位
  			 S->Arry[i-1]=InsertNum;
  			 S->Arrylength++;
  			 return OK;
  		}
}

//将第i个元素删除
  Statue Delete_Sqlist(Sqlist *&S,int i)
{
  	if(i<=0 && i>S->Arrylength)
  		return ERROR;
  	else
  		{
  			int j;
  			for(j=0;j<=S->Arrylength-i;j++)
  			  S->Arry[i-1+j]= S->Arry[i+j];
  			 S->Arrylength--;
  			 return OK;
  			}
}

//删除值为x的元素
  void DeleteX_Sqlist(Sqlist *&S,int x)
{
  	int i;
  	for(i=0;i< S->Arrylength;i++)
      {
      	if(x == S->Arry[i])
      		{
      			//Delete_Sqlist( *S, i);
				int j;
  			    for(j=0;j<=S->Arrylength-i;j++)
  			      S->Arry[i+j]= S->Arry[i+j+1];
  			    S->Arrylength--;
      		}
      	}
}

  //打印函数
  void print(Sqlist *&S)
  {
    int m;
	for(m=0;m<S->Arrylength;m++)
		{
			cout<<setw(4)<<S->Arry[m];
			if((m+1)%4==0)
				cout<<endl;
	     }
  }

int main()
{
	Sqlist *p1;
    Create_Sqlist( p1);
	cout<<"建立顺序表is OK"<<endl;
    Init_Sqlist(p1);
	cout<<"初始化顺序表is OK,数据如下:"<<endl;
	print(p1); 

	int i,InsertNum;
	cout<<"输入两个如下:";
	cin>>i;cin>>InsertNum;
	cout<<"插入数操作如下:在第"<<i<<"行插入数字"<<InsertNum<<"后。结构显示如下:"<<endl;
	Insert_Sqlist( p1, i, InsertNum);
	print(p1);

	int k;
	cout<<endl;
	cout<<"输入一个数如下:";
	cin>>k;
	cout<<"删除数操作如下:"<<endl;
	cout<<"想要删除第"<<k<<"个数 显示如下:"<<endl;
    Delete_Sqlist(p1,k);
    print(p1);

	int j;
	cout<<"输入一个数"<<endl;
    cin>>j;
	cout<<"删除指定数操作如下:输入想要删除的数是:"<<j<<"    结果显示如下:"<<endl;
    DeleteX_Sqlist(p1,j);
	print(p1);

	while(1);
	return 0;
	}

显示结果如下:

分析比较下面代码段的差别:

A段——建立空表没有bug的代码:

 typedef struct sqlist
   {
   	elem_type  *Arry;
   	int  Arrylength;
   	} Sqlist;

   //建立一个空表
  Statue Create_Sqlist(Sqlist *&S)
   {
        S = (Sqlist *)malloc(sizeof(Sqlist));
	S->Arry = (elem_type *)malloc(MaxSize);
   	}

B段——建立空表出现bug的代码:

typedef struct sqlist
   {
   	elem_type  Arry[MaxSize];
   	int  Arrylength;
   	} Sqlist;

   //建立一个空表
  Statue Create_Sqlist(Sqlist *S)
   {
    S->Arry = (elem_type *) malloc(MaxSize*sizeof(elem_type));  }

数据结构中构建顺序表

时间: 2024-08-05 11:19:54

数据结构中构建顺序表的相关文章

c语言实现数据结构中的顺序表

以下是我用c语言实现的顺序表 /  #pragma once;    #ifndef _STDLIB_H    #include <stdlib.h>    #endif    #ifndef _ELEMTYPE_H    typedef int ElemType;                                   #endif    #ifndef _SORTTYPE_H    typedef int SortType;        #endif  #ifndef _FU

【自考】数据结构中的线性表,期末不挂科指南,第2篇

线性表 这篇博客写的是线性表相关的内容,包括如下部分,先看下有木有期待 啥是线性表 线性表的顺序存储 线性表的基本运算在顺序表上的实现 线性表的链式存储 线性表的基本运算在单链表上的实现 循环链表与双向循环链表 Over,内容还蛮多的!~  ̄□ ̄||,头大了... 首先明确一个非常重要的点 线性表是一个线性结构,注意上篇博客提过线性结构是数据的逻辑结构中的一种 基本概念 线性表是由n(n≥0)个数据元素组成的有穷序列 大白话:在内存上一个个排着,找到一个,剩下的挨着找就行 数据元素又称作结点 吐

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

顺序表实验2

<数据结构> 实验报告 题目:_顺序表的实现 学号:___________ 姓名:___________ 东南大学计算机系 实验题目 一.    实验目的 1.    掌握顺序表的基本操作,实现顺序表的插入.删除.查找等基本运算. 二.    实验内容 1.                       完善顺序表的定义,并运用其实现线性表的操作. 2.                       (课上任务) 选题一:集合的交.并.差运算 [问题描述]         编制一个能演示执行集合的

Java实现顺序表

利用顺序存储结构表示的顺序表称为顺序表. 它用一组连续的地址存储单元一次存放线性表中的数据元素. 顺序表的实现是数据结构中最简单的一种. 由于代码中已经有详细注释,代码外不再阐述. 下次再陈上关于顺序表的循环队列和顺序栈的代码. 1 package 线性表.顺序表.普通数组; 2 3 /** 4 * ArrayList 顺序表 5 * JAVA 3.0 6 * 抛异常处理错误的下标 7 * 使用泛型,当然如果要替换成Object也是可以替换 8 */ 9 public class ArrayLi

顺序表的算法

顺序表 要点 顺序表是在计算机内存中以数组的形式保存的线性表,是指使用一组地址连续的存储单元依次存储数据元素的线性结构. 顺序表的存储结构可表示如下: #define MAXSIZE 10 typedef int ElemType; typedef struct { // 顺序表的结构类型 ElemType data[MAXSIZE]; int length; } SqList; 基本操作 插入数据元素 在顺序表的第 pos(0≤pos≤length) 个位置上插入新的元素e. 如果 pos 值

线性表 及Java实现 顺序表、链表、栈、队列

数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至少在一段时间之后,技术可以很快得到提高.同时,它也是软考的重点,我们需要对这部分的内容进行一下总结. 我们先看一下数据结构和算法的整体内容. 1.线性表 概念: 数据元素的排列方式是线性的. 分类: 分类规则是根据上图中元素的存储结构来划分的. (1)顺序表 基本思想:元素的存储空间是连续的.在内

【数据结构】顺序表和链表

一.顺序表 顺序表定义 :顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 顺序表可以分为静态顺序表和动态顺序表,静态较为简单,本文提供全部动态顺序表基本操作的代码. 顺序表的基本操作:

数据结构学习总结(1)线性表之顺序表

通过前面的学习知道,具有“一对一”逻辑关系的数据,最佳的存储方式是使用线性表.那么,什么是线性表呢? 线性表,全名为线性存储结构.使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中”. 采用线性表将其储存到物理空间中. 首先,用“一根线儿”把它们按照顺序“串”起来,如图 2 所示:                                                             图 2 数据的"线性"结构 图 2 中,左侧是“