利用数组创建的顺序表实现各种功能

主函数main.c

#include "func.h"
#define MAXSIZE 100
INT32 main(
		  void
		  )
{
	INT32 temp[MAXSIZE] = {NULL}, f = 0, OSM = 1;
	OSM = create_SL (temp);
	do
	{
		OSM = OSM_Printf("\n\t========================================\n");
		OSM = OSM_Printf("\t=============请选择功能选项:============\n");
		OSM = OSM_Printf("\t===============1、插入元素===============\n");
		OSM = OSM_Printf("\t===============2、删除元素===============\n");
		OSM = OSM_Printf("\t===============3、追加元素===============\n");
		OSM = OSM_Printf("\t===============4、获取元素===============\n");
		OSM = OSM_Printf("\t===============5、查找元素===============\n");
		OSM = OSM_Printf("\t===============6、清空元素===============\n");
		OSM = OSM_Printf("\t===============7、推断是否空=============\n");
		OSM = OSM_Printf("\t===============8、推断是否已满===========\n");
		OSM = OSM_Printf("\t===============9、统计元素的个数=========\n");
		OSM = OSM_Printf("\t===============0、退出===================\n");
		OSM = OSM_Printf("\t**************** 选择数字 ***************\n");
		f = scanf_for();
		switch(f)
		{
		case 1:
			OSM = Insert_SL (temp);
			break;
		case 2:
			OSM = Delete_SL (temp);
			break;
		case 3:
			OSM = add_SL (temp);
			break;
		case 4:
			OSM = get_SL (temp);
			break;
		case 5:
			OSM = find_SL (temp);
			break;
		case 6:
			OSM = clear_SL (temp);
			break;
		case 7:
			OSM = empty_SL (temp);
			break;
		case 8:
			OSM = full_SL (temp);
			break;
		case 9:
			OSM = number_SL (temp);
			break;
		case 0:
			break;
		default:
			OSM = OSM_Printf("输入数据是非法的!

。!

!\n");
			break;
		}
	}while (0 != f);
	return 0;
}

功能函数:func.c

#include "func.h"
#define MAXSIZE 100											/* 開始限定这个顺序表的大小 */

INT32 create_SL(INT32 a[])									/* 创建 */
{
	INT32 OSM = 1, i32num = 0, i32 = 0;			

	OSM = OSM_Printf("请输入要创建链表中元素的个数:\n");
	i32num = scanf_for();

	if ( (0 > i32num) || (MAXSIZE < i32num) )				/* 创建的条件 */
	{
		OSM = OSM_Printf(" 非法的数据\n");
	}
	else
	{
		OSM = OSM_Printf("输入相关的元素:\n");
		for ( i32 = 0; i32 < i32num; i32++)					/* 输入的元素 */
		{
			a[i32] = scanf_for();
		}
	}
	OSM = OSM_Printf("已经创建了表\n");
	OSM = OSM_Printf("表为:");
	for ( i32 = 0; i32 < i32num; i32++)					/* 打印出来 */
	{
		if ( NULL != a[i32] )
		{
			OSM = OSM_Printf(" %d \t",a[i32]);
		}
	}
	i32length = i32;
	return *a;
}
INT32 Insert_SL(INT32 b[])
{
	/* 定义的标识符。 输入的位置, 数组的长度, 插入的数据,循环体变量 */
	INT32 OSM = 1, i32Insert_position = 0, i32Insert_data = 0, i32j = 0;
	OSM = OSM_Printf("输入要插入的位置和数据:\n");
	i32Insert_position = scanf_for();					/* 插入的位置 */
	if(( 0 > i32Insert_position) || (i32length < i32Insert_position))			/* 插入位置的条件不满足的情况下 */
	{
		OSM = OSM_Printf("非法的数据输入:\n");
	}
	else																	/* 插入的条件满足的条件下 */
	{
		OSM = OSM_Printf("请输入要插入的数据:\n");
		i32Insert_data = scanf_for();										/* 输入插入的数据 */
	}
	i32length++;															/* 长度加一 */
	for (i32j = i32length; i32j > (i32Insert_position-1); i32j--)				/* 位置的后移 */
	{
			b[i32j] = b[i32j - 1];
	}
	b[i32Insert_position-1] = i32Insert_data;
	for ( i32j =  0; i32j < i32length ;i32j++)						/* 打印出来的信息 */
	{
		if (NULL != b[i32j])
		{
			OSM = OSM_Printf("%d\t",b[i32j]);
		}

	}
	OSM = OSM_Printf("\n");
	return *b;
}

INT32 Delete_SL(INT32 a[])					/* 删除 */
{
	INT32 i32i = 0, OSM = 0, i32delete_position = 0;
	OSM = OSM_Printf("输入要删除的位置:\n");
	i32delete_position = scanf_for();				/* 输入要删除的位置 */
	if ((0 > i32length) || (i32delete_position > i32length))					/* 条件 */
	{
		OSM = OSM_Printf("输入的非法数据");
	}
	else
	{
		i32length--;															/* 长度减一 */
		for (i32i = i32delete_position - 1; i32i < i32length; i32i++)				/* 进行数据的处理 */
		{
			a[i32i] = a[i32i+1];
		}
	}
	for ( i32i =  0; i32i < i32length ;i32i++)						/* 打印出来的信息 */
	{
		if (0 <= i32i)
		{
			if (NULL != a[i32i])
			{
				OSM = OSM_Printf("%d\t",a[i32i]);
			}
		}
	}
	return *a;
}

INT32 add_SL(INT32 a[])							/* 追加 */
{
	INT32 OSM = 1, i32add_data, i32i;
	OSM = OSM_Printf("输入要追加的数据:\n");
	i32add_data = scanf_for();						/* 输入追加的元素 */
	i32length++;									/* 长度加1 */
	a[i32length -1] = i32add_data;						/* 直接赋值 */
	for ( i32i =  0; i32i < i32length; i32i++)						/* 打印出来的信息 */
	{
		if (NULL != a[i32i])
		{
			OSM = OSM_Printf("%d\t",a[i32i]);
		}
	}
	return *a;
}

INT32 get_SL(INT32 a[])					/* 获取元素 */
{
	INT32 OSM = 1, i32location = 0;
	OSM = OSM_Printf("选择须要获位置\n");
	i32location = scanf_for();
	if (i32location > i32length)
	{
		OSM = OSM_Printf("超出范围了\n");
	}
	else
	{
		if ( (NULL != (i32location - 1)) && (NULL != a))
		{
			OSM = OSM_Printf("获取的数据为: %d \t",a[i32location - 1]);
		}

	}

	return 0;
}

INT32 find_SL(INT32 a[])				/* 查找 */
{
	INT32 OSM = 1,flag = 0, i32i = 0, i32elem = 0;

	OSM = OSM_Printf("输入须要查找元素:\t");
	i32elem = scanf_for();
	OSM = OSM_Printf("查询的位置是:");
	for (i32i = 0; i32i < i32length; i32i++)
	{
		if ( i32elem == a[i32i])
		{
			OSM = OSM_Printf(" %d ",i32i + 1);
			flag = 1;
		}
	}
	if (1 != flag)
	{
		OSM = OSM_Printf("没有找到想要的数据!!!!!!!\n");
	}
	return *a;
}

INT32 clear_SL(INT32 a[])			/* 清空 */
{
	a[i32length] = NULL;
	i32length = 0;
	return 0;
}

INT32 empty_SL(INT32 a[])					/* 判读是否为空 */
{
	INT32 OSM = 1;
	if ( 0 == i32length)						/* 推断第一个是否为空 */
	{
		OSM = OSM_Printf("是空的\n");
	}
	else
	{
		OSM = OSM_Printf(" 不是空的 \n");
	}
	return 0;
}

INT32 full_SL(INT32 a[])							/* 是否已满 */
{
	INT32 OSM = 1;
	if ( MAXSIZE > i32length)				/* 推断最后一个元素是否为空 */
	{
		OSM = OSM_Printf("没有满\n");
	}
	else
	{
		OSM = OSM_Printf("已经满了\n");
	}
	return 0;
}

INT32 number_SL(INT32 a[])					/* 元素的个数 */
{
	INT32 OSM = 1;
	if ( 0 <= i32length )
	{
		OSM = OSM_Printf("元素的个数为%d\n",i32length);
	}
	return 0;
}

花费了几天的时间最终达到要求了。

全部的代码都能够通过MISRA C的检測。而且功能良好

时间: 2024-10-13 17:35:11

利用数组创建的顺序表实现各种功能的相关文章

用顺序表实现一个循环队列

队列是一种先进先出的线性表,简称FIFO.允许插入的一端为队尾,允许出列的一端为队头. 比如一个队列q=(p1,p2,p3,p4...pn),p1就是那个队头,pn就是队尾.出列时总是从p1开始 向后,入列时总是从pn后面插入.就像敲键盘,依次敲qwr,屏幕上显示的就是qwr,先敲的先显 示. 以下代码是用顺序表实现一个循环队列 1 /** 2 * @filename queue.c 3 * @author haohaibo 4 * @data 2017/4/12 5 * @brief 用顺序表

DS之顺序表实现乱序输入顺序输出

顺序表的实例有很多,在学其他的编程语言时,肯定都学过要求输入一串乱序的数字,要求进行排序,实现升序或降序输出.今天就来用顺序表实现乱序输入,顺序输出(升序). 实现上述的功能需要用到的顺序表的基本操作有0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 自己只需写一个排序的函数,排序函数的代码为: <span style="font-size:18px;">//排序函数 void paixu(SqList &L) { for(int i=0;i<L.

DS之顺序表实现输入数据逆置

实现输入数据逆置和顺序表实现排序是两个极其相似的过程,因此使用的顺序表的基本操作也是一样的:0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 要想实现输入数据元素的逆置还需要一个逆置函数,逆置函数在C++,C#语言中早已接触过,因此不陌生,记得在做大量的C++的程序代码补充的大题就写过不下数十遍,挺简单的掌握技巧,就是你输入数据的个数的一半,前后进行交换,因此逆置函数的代码为: <span style="font-size:18px;">//逆置函数 void

用顺序表实现求两个集合的并集

#include<iostream.h> #include<malloc.h> #include<limits.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<stdlib.h> #include<process.h> #define OK 1 #define INIT_LiST_SIZE 100//顺序表的初始长度 #de

各路大神大显神通!帮帮忙如何使用顺序表实现以下任务

5r0lp9k32a伟矢汗仲颐窍郊系拖脑<http://weibo.com/p/230927987720190915518464> aki6we5yzu占麓仕掩妒辖枚睬啥刭<http://weibo.com/p/230927987720126407122944> vxbanbazps律男烁稳倮酝肺肺苫捶<http://weibo.com/p/230927987723046619975680> n3o87qg51q刀纺芈徽萍炙泊偬切塘<http://weibo.co

c++:用顺序表实现简单的栈

main.cpp #include<iostream> #include<string> #include"Stack.hpp" using namespace std; void test1(){                     //测试 Stack<int> s1; s1.Push(1); s1.Push(2); s1.Push(3); s1.Push(4); s1.Pop(); s1.Pop(); s1.Pop(); s1.Pop();

Jquery利用JSON数组创建表格

$(function () { var json = [ { "name": "张三", "age": "20", "gender": "男" }, { "name": "李四", "age": "21", "gender": "女" }, { "name&q

数据结构之哈希表实现浅析

看了下JAVA里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和HashMap.Hashtable的区别 HashMap和Hashtable的实现原理 HashMap的简化实现MyHashMap HashMap和Hashtable的区别 两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchron

javascript如何将数组元素的顺序打乱

javascript如何将数组元素的顺序打乱:下面介绍一下如何将数组元素原有的顺序打乱,可能在实际编码中使用不是太频繁,不过也并非一无是处,下面就介绍一下如何实现此功能,代码实例如下: function mytest() { return 0.5-Math.random(); } var arr=[]; for(var i=0;i<100;i++) { arr[i]=i; } arr.sort(mytest) document.write(arr); 以上代码实现我们想要的功能,能够将数组中元素