当前位置:首页 » 网络管理 » 如何在线性表删除一部分元素
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

如何在线性表删除一部分元素

发布时间: 2023-05-24 19:04:20

㈠ 删除线性表中第i个数据元素

#include"stdio.h"
#include"malloc.h"
#definenull0
structlnode{
intdata;
structlnode*next;
};

intmain()
{
intx,y,i=1,n,d;
charyesorno;
structlnode*head,*p,*q,*r;
head=null;
q=null;
head=(structlnode*)malloc(sizeof(structlnode));
head->next=null;
printf("请您输入一列正整数,并按0结束输入: ");
scanf("%d",&d);
while(d>0)
{
p=(structlnode*)malloc(sizeof(structlnode));
p->data=d;
p->next=null;
if(head->next==null)head->next=p;
elseq->next=p;
q=p;
scanf("%d",&d);
}
printf("您输入的链表为:");
q=head;
while(q->next!=null)//输出链表
{
printf("%d",q->next->data);
q=q->next;
}
printf(" ");
//2、 在线性表中值为弊信喊x的元素前插入一个值为y的数据元素。若值为x的结点不存在,则将y插在表尾。
printf("请输入x和y的值,并用空格隔开:");
scanf("%d%d",&x,&y);

r=(structlnode*)malloc(sizeof(structlnode));
r->data=y;
r->next=null;
q=head;
while(q->next!=null&&q->next->租野data!=x)q=q->next;
r->next=q->next;
q->next=r;

q=head;
printf("插入数据y后的链表为:");
while(q->next!=null)//输出链表
{
printf("%d",q->next->坦旦data);
q=q->next;
}
printf(" ");

//3、删除线性表中第i个数据元素。

printf("您要删除的元素是第几位: ");
scanf("%d",&n);
q=head;
i=1;//初始化i=1
while(i!=n)
{
if(q->next==null)break;
q=q->next;

i++;
}
if(q->next)
{

r=q->next;//被删的是r
q->next=r->next;
free(r);
}
q=head;
while(q->next!=null)//输出链表
{
printf("%d",q->next->data);
q=q->next;
}
printf(" ");
}

㈡ 怎样操作可以删除线性表中的一个元素呢

问题出现在查找效率上
链表最常用的操作是在末尾插入节点和删除尾节点
在尾巴插入 删除操作:
都需要知道他的前导 而单链表要查找到最有一个元素需要遍历全部链表
双链表直接可以查到前导
最常用的操作实在最后一个元素之后插入一个元素和删除第一个元素
删除头结点 需要头指针 或者只用一个->next域就能查到 速度就快了
在有第二个条件 删除最后一个元素 有尾指针就最好了 可以直接找到尾巴元素 同时他还是循环链表 所以正好他的->next就是头结点
ok?

㈢ 数据结构 线性表算法 实现怎么删除最后一个元素

线性表有两种,如果历启是顺序存储结构,只需l->length--即可;
如果是链式存储结构,则先找到最后一个节点
typedef struct node
{
int data;
struct node *next;
}*LinkList,Node;
……
void main()
{
LinkList L;
Node *p,*q;
p=L;
q=L;
while(p->next!=NULL)
{
q=p;
p=p->next;
}
if(p!=q) /*若相等腔凯,则肢圆如表示为空链表*/
{
q->next=NULL;
free(p);
}
}

㈣ 线性表中删除某些元素算法

Status ListDelete_Sq(SqList &L,int i,ElemType &e)
{
if((i<吵轿数1)||i>L.length)) return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;//表尾元升首帆枯素的位置
for(++p;p<=q;++p) *(p-1)=*p;
--L.length;
return OK;
}//ListDelete_Sq

㈤ 设计算法删除线性表中的多余元素

Node友和*p=head;
while(p->next!=NULL){
inta=p->data;
intb=p->next.data;
if(a==b){
p->next=p->next->next;
}

p=p->next;

是不核告判是就行了。改改。

㈥ 在顺序线性表中删除元素

楼主纠结的其实就是一个问题:指针运算到底是怎么计算的?其实这取决于指针的类型。举个例子,int *p,则p=p+1表示将指针p移动1个int长度(也就是4个字节);如果是char *p,则p=p+1表示指针p移动一个char长度(也就是1个字节)。而到底移动多少个字节,是由编译器通过指针的类型来决定的。所以你的问题中,L.elem+L.length-1自然就是移动到最后一个元素了。

有问题欢迎追问!

㈦ 线性表删除元素

首迅穗察先,你要知道数组的存储方式,数组的下标是从0开始的,比如要往数组a[3]数组中存储1,2,3,3个数,他是这样放的,a[0]=1,a[1]=2,a[2]=3,数组下标只到2,而不是3, i 是我们要删除的元素的位置(表面上我们认为的位置),在数组中的实际位置的下标则是[i-1],所以,是p=&(L.elem[i-1])而不是p=&(L.elem[i]);
其次,q=L.elem+L.length-1表示的是族纤表尾元素的位置,L.elem是数组名也就是数组的首地址,如果想访问某个元素,只需在后边加上相应的偏移量,L.length是数亩茄组的长度,那么最后一个元素在数组中的位置就是[L.length-1],那么,L.elem+L.length-1就表示在数组首地址向后偏移L.length-1这么多,也就访问了最后一个元素;

c语言线性表中元素的删除

a[0]不存放元素,那我用来放表的大小了?
#include
<stdio.h>
#define
N
10
int
vector[N];
void
initialize_vector()
{
vector[0]
=
0;
}
void
print_vector()
{
int
i,
size;
for
(i
=
1,
size
=
vector[0];
i
<=
size;
++i)
printf("%d
",
vector[i]);
printf("\n");
}
void
add(int
value)
{
if
(vector[0]
<
N
-
1)
{
vector[++vector[0]]
=
value;
}
}
void
erase(int
value)
{
int
c,
i,
j,
size
=
vector[0];
for
(i
=
0,
j
=
1,
c
=
0;
j
<=
size;
++j)
{
if
(vector[j]
==
value)
++c;
else
vector[++i]
=
vector[j];
}
vector[0]
-=
c;
}
int
main()
{
int
array[]
=
{
5,
4,
3,
3,
6,
7,
3,
9,
},
i;
for
(i
=
0;
i
<
sizeof(array)
/
sizeof(int);
++i)
add(array[i]);
printf("before
remove:
\n");
print_vector();
erase(3);
printf("after
remove:
\n");
print_vector();
return
0;
}

㈨ 数据结构 顺序存储 线性表删除元素的简单问题

Status
DeleteK(SqList
&a,int
i,int
k)//删除线性表a中第i个元迟仿素起的k个元素
{

int
count;
//首先你要定义个变量啊,这里我假设数组下标从0开始哈
if(i<1||k<0||i+k-1>a.length)
return
INFEASIBLE;

/*一共码老纤删除K个元素,所以需要移动元素a.length-i-k+1次*/
for
(count
=
0
;
count
<
a.length-i-k+1;
count++)
{
a.elem[
i-1+count]
=
a.elem[i-1+count+k];
}
a.length-=k;

return
OK;
}//DeleteK 其实好像和你的方法是一样的,只是写法有所不同,我觉得含漏我的写法更容易直接看出编程的意图.