#include<stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
}SqList;
void InitList(SqList &L){
for(int i=0;i<MaxSize;i++)
L.data[i]=0;
L.length=0;
}
bool CreateList(SqList &L,int n){
if(n>10)
return false;
printf("請輸入線性表中的元素:");
for(int i=0;i<n;i++)
scanf("%d",&L.data[i]);
L.length=n;
return true;
}
void ListTravel(SqList L){
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
}
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1)
return false;
if(i==L.length+1){
L.data[i-1]=e;
L.length+=1;
return true;
}
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length+=1;
return true;
}
bool ListDelete(SqList &L,int i){
if(i<1||i>=L.length+1)
return false;
for(int j=i;j<=L.length;j++)
L.data[j-1]=L.data[j];
L.length-=1;
return true;
}
bool ListDeletee(SqList &L,int e){
int n=0;
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
for(int j=i;j<L.length;j++)
L.data[j]=L.data[j+1];
L.length-=1;
i--;
n++;
}
}
if(n==0)
return false;
return true;
}
bool ChangeList(SqList &L,int a,int b){
int n=0;
for(int i=0;i<L.length;i++){
if(L.data[i]==a){
L.data[i]=b;
n++;
}
}
if(n==0)
return false;
return true;
}
bool ChangeListt(SqList &L,int i,int b){
if(i<1||i>L.length-1)
return false;
L.data[i-1]=b;
return true;
}
int GetElem(SqList L,int i){
return L.data[i-1];
}
int *LocateElem(SqList L,int e){
static int n[MaxSize];
int j=0;
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
n[j+1]=i+1;
j++;
}
}
n[0]=j;
return n;
}
void ClearList(SqList &L){
L.length=0;
}
void DestroyList(SqList &L){
printf("L has been destroyed.\n");
//靜態分配的陣列在作用域結束后記憶體就釋放了(因此不能作為函式回傳值),不需要再進行destroy
}
int Length(SqList L){
return L.length;
}
bool Empty(SqList L){
if(L.length==0)
return true;
else
return false;
}
int main(){
SqList L;
int n;
printf("請輸入線性表中元素的個數(<=10):");
scanf("%d",&n);
InitList(L);
if(CreateList(L,n))
ListTravel(L);
else
printf("輸入元素個數不合法!");
//插入
int i,e;
printf("請輸入要插入的位序以及插入的值:");
scanf("%d %d",&i,&e);
if(ListInsert(L,i,e))
ListTravel(L);
else
printf("輸入位序不合法!");
//洗掉指定位序
printf("請輸入要洗掉的位序:");
scanf("%d",&i);
if(ListDelete(L,i))
ListTravel(L);
else
printf("輸入位序不合法!");
//洗掉指定值
printf("請輸入要洗掉的值:");
scanf("%d",&e);
if(ListDeletee(L,e))
ListTravel(L);
else
printf("找不到要洗掉的值!");
//修改指定值
int a,b;
printf("請輸入要修改的值以及修改后的值:");
scanf("%d %d",&a,&b);
if(ChangeList(L,a,b))
ListTravel(L);
else
printf("找不到要修改的值!");
//修改指定位序的值
printf("請輸入要修改的位序以及修改后的值:");
scanf("%d %d",&i,&b);
if(ChangeListt(L,i,b))
ListTravel(L);
else
printf("輸入位序不合法!");
//查找指定位序的值
printf("請輸入要查找的位序:");
scanf("%d",&i);
e=GetElem(L,i);
printf("值為%d\n",e);
//查找指定值的位序
printf("請輸入要查找的值:");
scanf("%d",&e);
int *r=LocateElem(L,e);
for(i=0;i<r[0];i++)
printf("位序為%d\n",r[i+1]);
//判空
if(Empty(L))
printf("線性表為空!\n");
else
printf("線性表不為空!\n");
//求表長
int l=Length(L);
printf("此時表長為%d\n",l);
//洗掉線性表
ClearList(L);
DestroyList(L);
if(Empty(L))
printf("線性表為空!\n");
else
printf("線性表不為空!\n");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276344.html
標籤:新手樂園
