#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;
}
順序表的初始化、建立、求表長、輸出、插入、查找、刪除等操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.