順序表的初始化、建立、求表長、輸出、插入、查找、刪除等操作

#include<stdio.h>
#define MAXSIZE 10
typedef int Status;                                              //函數結構狀態碼 0-失敗; 1-成功
typedef int ElemType;

typedef struct
{
	ElemType data[MAXSIZE];
	int length;
}SqList;

//順序表操作的函數聲明
void InitList(SqList *LP);                                       //順序表的初始化
void CreateList(SqList *LP,ElemType a[],int n);                  //順序表的創建
void PrintList(SqList *LP);                                      //順序表的輸出
int ListLength(SqList *LP);                                      //求順序表的長度,即當前元素個數
Status ListInsert(SqList *LP,int i,ElemType e);                  //順序表的插入操作,在位置i插入元素e
Status GetElem(SqList *LP,int i,ElemType *e);                    //順序表的查找操作,返回第i個位置的元素值到e中
Status ListDelete(SqList *LP,int i,ElemType *e);                 //順序表的刪除操作,返回第i個位置的元素值到e中


int main()
{
	SqList L,*SP;
	int flag;                                                    //用於接收函數返回狀態,0或1
	ElemType result;                                             //用於接收查找或刪除的元素
	int search;                                                  //查找或刪除search位置的元素

	ElemType arr[]={12,14,16,24,28,30,42,77};
	SP=&L;
	InitList(SP);
	CreateList(SP,arr,8);
	PrintList(SP);
	printf("順序表的當前長度是:%d\n\n",ListLength(SP));


	//順序表中插入元素

	printf("在第0個位置插入25:\n");
	flag=ListInsert(SP,0,25);
	if(flag==1)
	{
	PrintList(SP);
	printf("順序表的當前長度是:%d\n\n",ListLength(SP));
	}
	else
	{
	printf("順序表插入失敗!\n");
	printf("順序表的當前長度是:%d\n\n",ListLength(SP));
	}
	


	printf("在第10個位置插入100:\n");
	flag=ListInsert(SP,10,100);
	if(flag==1)
	{
	PrintList(SP);
	printf("順序表的當前長度是:%d\n\n",ListLength(SP));
	}
	else
	{
	printf("順序表插入失敗!\n");
	printf("順序表的當前長度是:%d\n\n",ListLength(SP));
	}



	printf("在第11個位置插入110:\n");
	flag=ListInsert(SP,11,110);
	if(flag==1)
	{
	PrintList(SP);
	printf("順序表的當前長度是:%d\n\n",ListLength(SP));
	}
	else
	{
	printf("順序表插入失敗!\n");
	printf("順序表的當前長度是:%d\n\n",ListLength(SP));
	}

	//順序表中插入元素






	//順序表中查找元素

	printf("要查找第幾個元素?\n");
	scanf("%d",&search);
	flag=GetElem(SP,search,&result);
	if(flag==1)
		printf("第 %d 個元素是 %d \n\n",search,result);
	else
		printf("順序表查找失敗!\n");

	//順序表中查找元素







	//順序表中刪除元素

	printf("要刪除第幾個元素?\n");
	scanf("%d",&search);
	flag=ListDelete(SP,search,&result);
	if(flag==1)
		printf("刪除的第 %d 個元素是 %d \n\n",search,result);
	else
		printf("順序表刪除失敗!\n");

	//順序表刪除元素


	return(0);
}

void InitList(SqList *LP)
{
	LP->length=0;
}

void CreateList(SqList *LP,ElemType a[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		LP->data[i]=a[i];
		LP->length++;
	}
}

void PrintList(SqList *LP)
{
	int i;
	printf("\n 順序表中的元素爲:\n");
	for(i=0;i<LP->length;i++)
		printf("%4d",LP->data[i]);
	printf("\n\n");
}

int ListLength(SqList *LP)
{
	return(LP->length);
}



/*====================================
函數功能:順序表運算——元素的插入
函數輸入:順序表地址,插入值,插入位置
函數輸出:完成標誌—— 0:異常 1:正常
====================================*/
Status ListInsert(SqList *LP,int i,ElemType e)
{
	int k;

	if(LP->length==MAXSIZE)                                     //順序表已滿
		return 0;
	if(i<1||i>LP->length+1)                                     //插入位置i非法
		return 0;

	for(k=LP->length-1;k>=i;k--)                                //從順序表最後一個元素開始後移
		LP->data[k+1]=LP->data[k];

	LP->data[i-1]=e;                                            //講插入的元素放入i-1中

	LP->length++;                                               //順序表長度加1,因爲插入了一個元素
	return 1;
}




/*==================================================
函數功能:順序表運算——元素的查找
函數輸入:順序表地址,查找位置,接收查找值的變量(地址)
函數輸出:完成標誌—— 0:異常 1:正常
==================================================*/
Status GetElem(SqList *LP,int i,ElemType *e)
{
	int k;
	if(LP->length==0||i<1||i>LP->length)                         //異常情況;空表或查找位置越界    
		return 0;
	*e=LP->data[i-1];
	return 1;
}



/*===========================================
函數功能:順序表運算——元素的刪除
函數輸入:順序表地址,刪除位置,返回刪除元素值
函數輸出:完成標誌—— 0:異常 1:正常
===========================================*/
Status ListDelete(SqList *LP,int i,ElemType *e)
{
	int k;
	if(LP->length==0)                                           //順序表爲空
		return 0;
	if(i<1||i>LP->length)                                       //刪除位置越界
		return 0;
	*e=LP->data[i-1];                                           //獲得刪除的元素值

	for(k=i;k<LP->length;k++) 
		LP->data[k-1]=LP->data[k];

	LP->length--;
	return 1;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章