① 数据结构(C语言版)中的删除链表中的一个节点
代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct List
{
int a;
List* next;
}list;
void newList(list* l)//创建结点
{
list* a[4];
for (int i = 0; i < 4; i++)
{
a[i] = (list*)malloc(sizeof(list));
a[i]->a = i+1 ;
}
l->next = a[0];
a[0]->next = a[1];
a[1]->next = a[2];
a[2]->next = a[3];
a[3]->next = NULL;
}
void printfList(list* l)//打印结点的数据内容
{
printf("该链表的内容是: ");
while (l->next)
{
printf("%d ", l->next->a);
l = l->next;
}
printf(" ");
}
void setList(list* l,int x,int y)
{
list* head = l;
l = l->next;
while (l)
{
if (l->a >=y || l->a <=x)//将结点的数据区与指定区域进行比较
{
head->next = l;//将满足条件的结点连接在新表的最后一个结点
//指针后移
l = l->next;
head = head->next;
}
else
{
//不满足的结点进行删除
list* l1 = l;
l = l->next;
free(l1);
}
}
head->next = NULL;
}
int main()
{
list* l = (list*)malloc(sizeof(List));
newList(l);//初始化链表
printfList(l);//输出旧表内容
setList(l,1,3);//进行修改
printfList(l);//输出修改后的链表
//system("pause");
return 0;
}
(1)数据结构编辑怎么删除扩展阅读
链表的特点
1、插入、删除数据效率高,时间复杂度为O(1)级别(只需更改指针指向即可),随机访锋陪问效率低,时间复杂度O(n)级别(需要从链头至链尾进行遍历)。
2、和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。
常用的链表类型
1、单链表
1)每个节点只包含一个指针,即后继指针。
2)单链表有两个特殊的节点,即首节点和尾节点。用首节点地址表示整条链表,尾节点的后继指针指向空地址null。
3)性能特点:插入和删除节点的时间复杂度为O(1),查找的时间复杂度为O(n)。
2、循环链表
1)除了尾节点的后继指针指向首节点的地址外均与单链表一致。
2)适用于存储有循环特点的数据,比如约瑟雀简夫问题。
3、顷基裤双向链表
1)节点除了存储数据外,还有两个指针分别指向前一个节点地址(前驱指针prev)和下一个节点地址(后继指针next)。
2)首节点的前驱指针prev和尾节点的后继指针均指向空地址。
② 数据结构顺序表的删除
#include "stdio.h"
#define MAX 12
#define TURE 1
#define FALSE 0
#define Elemtype int
Elemtype list[MAX];
int num=-1;
typedef struct Sqlist{
Elemtype List[MAX];
int Length;
}LLLLL;
int Delete(Sqlist & L,int j)
{
int i;
if(j<0||j>L.Length)
{printf("error");
return FALSE;
}
for(i=j;i<L.Length;i++)
L.List[i-1]=L.List[i];
L.Length--;
return TURE;
}
void main(){
int a,b,s;
int length=10;
Sqlist c;
c.Length = 10;
printf("请启谨输入10个数悄枯基:\r\n");
for( a=0;a<length;a++)
scanf("%d",&c.List[a]);
printf("数组为:\r\n");
for( a=0;a<length;a++)
printf("%d\n",c.List[a]);
printf("输入要删除的位置:\r\n");scanf("败猛%d",&b);
s=Delete(c,b);
printf("结果为:\r\n");
for(a=0;a<c.Length;a++)
printf("%d\r\n",c.List[a]);
system("Pause");
③ 数据结构队列出队代码怎么删除
队列出队代码删除商品的方法如下皮键嫌:
1. 使用循环遍历队列,找到要删除的商亮兆品;
2. 将要删除的商品从队列中移除;
3. 将队列中的其他商品向前移动,以填补燃手删除商品留下的空缺;
4. 将队列的最后一个元素置为null;
5. 最后,将队列的长度减1.
④ 数据结构删除所有的相同的字符串
改唯搏DelString就好了:
void DelString(LINE * &head,char *str)
{
LINE *p=head;
do
{
while(strstr(p->data,str)!=NULL)delstringword(p->data,str);
}
while((p=p->next)!=NULL); //指弊遍历 链表指逗祥
}
⑤ 在数据结构有序的顺序表中,怎样删除重复的数据
Linklist deleteDup(Linklist Header){
if(Header == NULL || Header->next == NULL) return Header;
Node* tmp = Header->next;
while(tmp != NULL && tmp->next != NULL){
if(tmp->next->data == tmp->data) tmp->next = tmp->next->next;
else tmp = tmp->next;
}
return Header;
}
⑥ 数据结构单链表删除某一节点操作
题目说的枯铅就消败绝是删除p的后继结点.不要把p看作一个孤立的指针,事实上,p是前一个结点指针域.
q = p->next; // q记录欲删除的结点
p = p->next->next; // 跨过欲删除的结点,也拿姿可写作 p->next = q->next
free(q); // 释放该结点占用的空间