1. 程式人生 > >利用數組創建的順序表實現各種功能

利用數組創建的順序表實現各種功能

刪除元素 turn ati span null posit class efi 獲取

主函數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的檢測。而且功能良好

利用數組創建的順序表實現各種功能