详谈线性表的有关操作(Java、C两种语言)

    之前在学习线性表一章的时候,有些地方都是比较含糊的带过,只是把一些比较难理解的地方花了好长时间才明白。。。。然后写出代码,存在博客上面。从今天开始,将重新把数据结构这本书走一遍,用C和Java两种语言,尽量把每个部分都可以用代码实现一遍,使印象更加深刻,也算是重新学习一下C语言啦~~。而且现在新学期开始学Oracle啦,也会把一些学习过程中的代码以及重点难点记录下来,希望大家会关注哦~~

   线性表的概念都在之前的文章有提到,今天来说一下有关线性表的具体操作(数组实现),分为以下几个部分

      1.ListMakeEmpty()建立空表

      2.ElementTypeFindK(int *k , List L)根据位序 K 返回相应元素。

      3.int Find(ElementType X,List L)线性表中查找 X 第一次出现的位置

      4.void Insert(ElementType X,int i,List L)在位序 i 之前插入一个元素 X

      5.void Delete(ElementType X,int i, List L)删除

   Java篇:

/**
 * 有关线性表的操作
 *
 * @author DY1201zhangshuyou
 *
 * 1.查找X的第一次出现的位置
 * 2.根据位序返回相应的元素
 * 3.Insert
 * 4.Delete
 */
public class ListTestDemo01 {
	private int A[];
	private int nElem;

	public ListTestDemo01(int maxSize) {
		A = new int[maxSize];
		nElem = A.length;
	}

	/**
	 * 查找X的第一次出现的位置
	 */
	public int Find(int X, int[] A) {
		int i = 0;
		for (; i <= A.length; i++) {
			if (i <= A.length && A[i] == X) {
				return i;
			}
		}
		return -1;
	}
	/**
	 *根据位序返回相应的元素
	 */
	public int FindElem(int elem , int[] A){
		for(int i = 0; i <= A.length; i++){
			while(i == elem){
				return A[i - 1];
			}
		}
		return 0;
	}
	/**
	 * Insert:把X插入第i个位置,就应该把i - 1后面的元素全部向后移动,并使数组的长度加1
	 * @param i
	 * @param A
	 */
	public void Insert(int X ,int i , int[] A){
		int j;
		if(i == A.length){    //表空间已满,不能插入
			System.out.println("数组已满");
			return;   //return表示中止当前函数的运行,并将操作权返回给调用者。
		}
		if(i < 1 && i > A.length + 1){     //检查插入位置的合理性
			System.out.println("位置不合法");
			return;
		}
		for(j = A.length - 1;j > i -1; j--)
			A[j] = A[j - 1];
		A[i] = X;
		return;
	}
	/**
	 * Delete:删除指定位置i的元素
	 * @param i
	 * @param A
	 */
	public void Delete(int i , int[] A){
		int j;
		if(i > A.length || i < 1){
			System.out.println("超出数组的长度");
		}
		else{
			for(j = i;j < A.length -1 ;j++){
				A[j] = A[j + 1];
			}
		}
	}

	public void display() {
		for (int i = 0; i < nElem; i++) {
			System.out.println(A[i]);
		}
	}

	public static void main(String args[]) {
		ListTestDemo01 test = new ListTestDemo01(7);
		int[] A = new int[] { 10, 12, 21, 3, 4, 5, 6 };
		test.Insert(7, 2, A);
		System.err.println(test.FindElem(1, A));
		System.err.println(test.FindElem(4, A));
		System.out.println(test.Find(21, A));
		System.out.println();
		test.Delete(2, A);
		for(int i = 0;i < A.length - 1;i++){
			System.out.print(A[i] + " ");
		}
	}
}

C语言篇:

稍后放上C语言代码。。稍安勿躁咯~

      

   

   

时间: 2024-10-02 23:30:53

详谈线性表的有关操作(Java、C两种语言)的相关文章

Java中有两种实现多线程的方式以及两种方式之间的区别

网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了. Java中有两种实现多线程的方式.一是直接继承Thread类,二是实现Runnable接口.那么这两种实现多线程的方式在应用上有什么区别呢? 为了回答这个问题,我们可以通过编写一段代码来进行分析.我们用代码来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的100张车票,一个售票点用一个线程表示. 我们首先这样编写这个程序: Java代码    class ThreadTest extends Thread{

Java中两种实现多线程方式的对比分析

本文转载自:http://www.linuxidc.com/Linux/2013-12/93690.htm#0-tsina-1-14812-397232819ff9a47a7b7e80a40613cfe1 Java中有两种实现多线程的方式.一是直接继承Thread类,二是实现Runnable接口.那么这两种实现多线程的方式在应用上有什么区别呢? 为了回答这个问题,我们可以通过编写一段代码来进行分析.我们用代码来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的100张车票,一个售票点用一个线

JAVA学习篇--JAVA的两种编程模式对比

在Drp项目中,讲解了两种编程模式Model 1和Model2,下面是对这两种模式的简单理解,以及由于Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对比学习一下. Model1 所谓Model1就是JSP大行其道的时代,在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应.用少量的JavaBean来处理数据库连接.数据库访问等操作. 代码示例:修改用户信息 主页面的js跳转: function

JavaWeb后台从input表单获取文本值的两种方式

JavaWeb后台从input表单获取文本值的两种方式 #### index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text" name="n

java String 两种不同的赋值 比较

原文http://blog.163.com/[email protected]/blog/static/1271436362012101214031911/ 在此感谢博主写出这么优秀的文章. 首先明确一点,String是一个类.下面我们主要讨论两个问题  a) String类的对象的两种赋值方式  b) 为什么String类的对象可以直接赋值  a) 1 类似普通对象,通过new创建字符串对象.String str = new String("Hello"); 内存图如下图所示,系统会

Android开发之使用sqlite3工具操作数据库的两种方式

使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/fengyuzhengfan/article/details/40193123 在Android SDK的tools目录下提供了一"sqlite3.exe工具,它是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口在有些时候,开发者利用该工具来査询. 管理数据库. 下面介绍两种方式: 第

JAVA 中两种判断输入的是否是数字的方法__正则化_

JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengzehua_test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { System.out.println("请输入第一个数字:"

java中两种添加监听器的策略

/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了MyListener(implements ActionListener)*/ 1 import java.applet.Applet; 2 import java.awt.event.*; 3 import java.awt.*; 4 public class ChangeColor extends Applet{//Applet的默认布局为FlowLayout方式 5 Color myColor; 6 String str; 7 B

java多线程 —— 两种实际应用场景模拟

java多线程-两种实际应用场景模拟 转自 薛定谔的猫 (一) 先说说第一个,模拟对信息的发送和接收.场景是这样的: 就像笔者之前做的消息的发送,一个是服务器,一个是客户端.发送的话,要保证信息100%的发送给客户端,那么发给客户端之后,客户端返回一个消息告诉服务器,已经收到.当服务器一直没有收到客户端返回的消息,那么服务器会一直发送这个信息,直到客户端发送回确认信息,这时候再删除重复发送的这个信息. 为了模拟这个场景,这里写两个线程,一个是发送,一个是接收,把发送的信息,要保存到线程安全的对象