int DelList ( List *L, int n, ElemType *x ) // 删除指定位置n的元素 { int i, j; j = L->Length; i = n - 1; if (i > j) { printf ( "\nDel Pos error!\n" ); return 0; } *x = L->items[n - 1]; for ( i = n – 1 ; i < j – 1 ; i++ ) L->items[i]=L->items[i+1] ; L->Length -- ; return 1; }
时间: 2024-03-31 20:32:31 浏览: 13
这段代码实现了一个删除线性表中指定位置元素的函数 DelList ,其中 List 是线性表的结构体, ElemType 是线性表元素的数据类型。函数的输入参数包括线性表的指针 L,待删除元素的位置 n,以及一个指向 ElemType 类型的指针 x,用于返回被删除的元素。函数返回值为 1 表示删除成功,返回值为 0 表示删除失败。
在函数实现中,首先判断待删除元素的位置是否合法,如果位置 n 超出了线性表的长度,则删除失败。接着将待删除元素的值赋给指针 x 所指向的变量,然后将待删除元素后面的所有元素向前移动一位,最后将线性表的长度减 1,表示成功删除了一个元素。
相关问题
编写算法:伤处顺序表中值为x的所有元素。函数格式:int DelList(SqList*L,DataType x)返回值:删除元素个数
这是一个简单的顺序表删除算法实现,可以直接返回删除元素个数。
```
int DelList(SqList* L, DataType x) {
int i, k = 0;
for (i = 0; i < L->length; i++) {
if (L->data[i] == x) {
k++; // 记录删除的元素个数
} else {
L->data[i - k] = L->data[i];
}
}
L->length -= k;
return k;
}
```
其中 `SqList` 是顺序表类型, `DataType` 是数据类型。
#include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct Node { ElemType data; struct Node * next; }Node,* Linklist; //采用循环链表来储存数据 void InitList(Linklist L) { L=(Linklist)malloc(sizeof(Node)); L->next=L; } //建立链表 void CreatFromTail(Linklist L) { Node * rear,* s; int n; rear=L; scanf("%d",&n); while(n!=0) { s=(Node *)malloc(sizeof(Node)); s->data=n; rear->next=s; rear=s; scanf("%d",&n); } rear->next=L; } //尾插法建表 void OutList(Linklist L) { Node * p; p=L->next; if(p==NULL) { printf("链表为空"); } while(p->data)//值不为空时输出 { printf("%d ",p->data); p=p->next; } } //输出循环链表 void DelList(Linklist L,ElemType * e,int i) { Node * pre,*r; int k; if(i<=0) printf("ERROR"); pre=L;k=0; while(pre!=NULL&&k<i-1) { pre=pre->next; k=k+1; } if(pre->next==NULL) { printf("删除位置不合法"); } r=pre->next; pre->next=r->next; * e=r->data; free (r); } //删除结点函数 int main() { Linklist L; InitList(L); CreatFromTail(L); OutList(L); int m=4; ElemType * e=0; DelList(L,e,m); OutList(L); return 0; }
这段代码存在一些问题:
1.在InitList函数中,应该传入Linklist *L的指针,否则无法修改传入的指针。
2.在CreatFromTail函数中,链表的尾节点应该指向头节点L,而不是直接将rear指向L。
3.在OutList函数中,判断链表为空的条件应该是L->next == L,而不是L->next == NULL。
4.在DelList函数中,应该判断i的合法性,如果i<=0或i超过链表长度,则应该输出错误信息。
5.在DelList函数中,如果删除的是最后一个节点,需要将尾节点rear指向删除节点的前一个节点pre。
6.在main函数中,指向ElemType类型的指针e没有分配空间,应该先分配空间再调用DelList函数。
下面是修改后的代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node *next;
} Node, *Linklist;
void InitList(Linklist *L) {
*L = (Linklist)malloc(sizeof(Node));
(*L)->next = *L;
}
void CreatFromTail(Linklist L) {
Node *rear = L, *s;
int n;
scanf("%d", &n);
while (n != 0) {
s = (Node *)malloc(sizeof(Node));
s->data = n;
rear->next = s;
rear = s;
scanf("%d", &n);
}
rear->next = L;
}
void OutList(Linklist L) {
Node *p = L->next;
if (p == L) {
printf("链表为空");
return;
}
while (p != L) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void DelList(Linklist L, ElemType *e, int i) {
if (i <= 0) {
printf("删除位置不合法");
return;
}
Node *pre = L, *r;
int k = 0;
while (pre->next != L && k < i - 1) {
pre = pre->next;
k++;
}
if (pre->next == L) {
printf("删除位置不合法");
return;
}
r = pre->next;
pre->next = r->next;
if (r == L) {
L = pre;
}
*e = r->data;
free(r);
}
int main() {
Linklist L;
InitList(&L);
CreatFromTail(L);
OutList(L);
int m = 4;
ElemType *e = (ElemType *)malloc(sizeof(ElemType));
DelList(L, e, m);
OutList(L);
return 0;
}
```
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)