#include <string.h>
#define MaxSize 100
typedef struct {
int data[MaxSize];
int length;
} SqList;
void InitList(SqList *L) { // 傳入的參數用指針
L->length = 0;
return;
}
int GetLength(SqList L) {
return L.length;
}
int GetElem(SqList L, int i, int *e) {
if (i < 1 || i > L.length){ /*無效的i值*/
return 0;
}else {
*e = L.data[i - 1]; //改變指針的值前面用*
return 1;
}
}
int Locate(SqList L, int x) /*按值查找*/
{
int i = 0;
while (L.data[i] != x){ /*查找值為x的第1個結點*/
i++;
}
if (i > L.length){
return (0); /*未找到*/
}else{
return (i+1);
}
}
int InsElem(SqList *L, int x, int i) {
int j;
if (i < 1 || i > L->length +1){ /*無效的參數i*/
return 0;
}
for (j = L->length; j >= i; j--) { /*將位置為i的結點及之後的結點後移*/
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = x; /*在位置i處放入x*/
L->length++; /*線性表長度增1*/
return 1;
}
int DelElem(SqList *L, int i) {
int j;
if (i < 1 || i > L->length){ //刪除時,i大於線性表的長度
return 0;
}
for (j = i; j < L->length; j++){
L->data[j - 1] = L->data[j];
}
L->length--;
return 1;
}
void DispList(SqList L) {
int i;
for (i = 1; i <= L.length; i++){
printf("%c", L.data[i - 1]);
}
printf("\n");
}
int main() {
int i;
int e;
SqList L;
InitList(&L); // 參數是指針時,實參應為地址
int chr;
memset(&L,0,sizeof(L));
while ((chr = getchar())!= '\n'){
InsElem(&L, chr, L.length+1); //連續插入元素
}
printf("線性表:");
DispList(L);
printf("長度:%d\n", GetLength(L));
i = 3;
GetElem(L, i, &e);
printf("第%d個元素:%c\n", i, e);
e = 'a';
printf("元素%c是第%d個元素\n", e, Locate(L, e));
i = 4;
printf("刪除第%d個元素\n", i);
DelElem(&L, i);
printf("線性表:");
DispList(L);
return 0;
}