void InitList(SqList &L);//构建顺序表L
bool ListDelete(SqList &L,int i);//删除顺序表L中的第i个元素
int main()
{
SqList L;
InitList(L);
int i;
scanf("%d",&i);
bool result = ListDelete(L,i);
if(result==false){//删除失败
printf("Delete Error.The value of i is illegal!\n");
}else if(result==true){//删除成功
printf("Delete Success.The elements of the SequenceList L are:\n");
for(int j=0; j<L.length; j++){
printf(" %d",L.elem[j]);
}
}
return 0;
}
void InitList(SqList &L)
{
ElemType e;
int i=0;
L.length=0;
scanf("%d",&e);
while(e!=-1)
{
L.elem[i++]=e;
L.length++;
scanf("%d",&e);
}
}
bool ListDelete(SqList &L,int i)
{//请完成本函数的功能,删除L中的第i个元素,删除失败返回false,否则返回true
}
实现思路:删除指定位置元素后,后面元素要都对应前移,即:
L.elem[j] = L.elem[j+1];
移动完成后数组长度减1.
bool ListDelete(SqList &L,int i)函数实现如下:
bool ListDelete(SqList &L,int i)
{
int j = 0;
if(i < 0 || i > L.length)
{
return false;
}
for(j = i-1;j < L.length-1;j++)
{
L.elem[j] = L.elem[j+1];
}
L.length--;
return true;
}
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType; //元素值域类型为int型
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
void Create(LinkList &L); //正序构建单链表,返回其头指针
void del_x_list(LinkList &L, ElemType x); //删除所有值下标为x的结点
void print(LinkList L); //输出链表元素
int main()
{
LinkList L;
int x;
Create(L);
printf("输入要删除的数的位置:");
scanf("%d", &x);
del_x_list(L, x);
print(L);
return 0;
}
void Create(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode));
//r始终指向尾结点,初始指向L,即头结点
LNode *r = L;
LNode *s;
int size;
scanf("%d", &size);
for (int i = 1; i <= size; i++)
{
s = (LinkList)malloc(sizeof(LNode));
int x;
scanf("%d", &x);
s->data = x;
r->next = s;
r = s;
}
r->next = NULL;
}
void del_x_list(LinkList &L, int index)
{
int j = 0;
LNode *p = L->next, *pre = L, *tmpNode;
if (index <= 0)
return;
//循环条件:p不为空
//若为NULL说明已遍历完成
while (p)
{
j++;
if (j < index)
{
pre = pre->next;
p = p->next;
}
else if (j == index)
{
tmpNode = p; //tmpNode指向该结点
p = p->next;
pre->next = p; //删除*tmpNode结点
free(tmpNode); //释放*tmpNode结点
}
else
{
break;
}
}
}
void print(LinkList L)
{
//输出链表元素值,每个值后输出一个空格
LinkList p = L->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}