急求一个数据结构作业中的,线性表的c语言表示和插入,删除,查找操作程序!请高手直到,不胜感激.

2024-12-31 19:01:31
推荐回答(1个)
回答1:

#include
#include
#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;
}