以C结构体或C++的“类 ,实现“链式线性表”,编写下面6个接口函数:CreateList、ListPrint、GetElem、ListLengthListlnsert、ListDelete
时间: 2023-05-27 18:08:09 浏览: 59
1. CreateList:创建链式线性表
```
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
ListNode* CreateList(int *arr, int n) {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
ListNode* tail = head;
for (int i = 0; i < n; i++) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = arr[i];
newNode->next = NULL;
tail->next = newNode;
tail = newNode;
}
return head;
}
```
2. ListPrint:打印链式线性表
```
void ListPrint(ListNode* head) {
ListNode* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
```
3. GetElem:获取指定位置的元素值
```
int GetElem(ListNode* head, int i) {
ListNode* p = head->next;
int j = 1;
while (p != NULL && j < i) {
p = p->next;
j++;
}
if (p == NULL || j > i) {
printf("Error: index out of range\n");
return -1;
} else {
return p->data;
}
}
```
4. ListLength:获取链式线性表的长度
```
int ListLength(ListNode* head) {
ListNode* p = head->next;
int len = 0;
while (p != NULL) {
len++;
p = p->next;
}
return len;
}
```
5. ListInsert:在指定位置插入元素
```
void ListInsert(ListNode* head, int i, int e) {
ListNode* p = head;
int j = 0;
while (p != NULL && j < i - 1) {
p = p->next;
j++;
}
if (p == NULL || j > i - 1) {
printf("Error: index out of range\n");
return;
}
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = e;
newNode->next = p->next;
p->next = newNode;
}
```
6. ListDelete:删除指定位置的元素
```
void ListDelete(ListNode* head, int i) {
ListNode* p = head;
int j = 0;
while (p->next != NULL && j < i - 1) {
p = p->next;
j++;
}
if (p->next == NULL || j > i - 1) {
printf("Error: index out of range\n");
return;
}
ListNode* q = p->next;
p->next = q->next;
free(q);
}
```