顺序表删除值为 x 的元素

思路:

  不要去考虑删除的字眼,要考虑如何进行保存非 x 的值

这里提供两种解法,殊途同归:

  1.将其中非 x 的元素统计并保存

  2.统计为 x 的元素个数,并将非 x 的元素保存

注意事项:

注意这里代码由于使用了引用(&),只能在 C++ 中编译通过

使用指针的时候一定要注意开辟空间,否则之后可能发现无法预知的错误

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define MaxSize 50
 4 typedef int ElemType;
 5
 6 typedef struct {
 7     ElemType data[MaxSize];
 8     int length;
 9 } Sqlist;
10
11 //将其中非 x 的元素统计并保存
12 void delnode1(Sqlist* &L, ElemType x) {
13     int k = 0, i;
14     for(i = 0; i < L -> length; i++) {
15         if(L -> data[i] != x) {
16             L -> data[k] = L -> data[i];
17             k++;
18         }
19     }
20     L -> length = k;
21 }
22
23 //统计为 x 的元素个数,并将非 x 的元素保存
24 void delnode2(Sqlist* &L, ElemType x) {
25     int k = 0, i;
26     for (i = 0; i < L -> length; i++) {
27         if (L -> data[i] == x) {
28             k++;
29         } else {
30             L -> data[i - k] = L -> data[i];
31         }
32     }
33     L -> length -= k;
34 }
35
36 void createList(Sqlist* &L, ElemType a[], int n) {
37     int i;
38     L = (Sqlist *)malloc(sizeof(Sqlist));
39     for (i = 0; i < n; i++) {
40         L -> data[i] = a[i];
41     }
42     L -> length = n;
43 }
44
45 void dispList(Sqlist *L) {
46     int i;
47     for (i = 0; i < L -> length; i++) {
48         printf("%d ", L -> data[i]);
49     }
50     printf("\n");
51 }
52
53 int main(int argc, char const *argv[]) {
54     Sqlist *L;
55     ElemType a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
56     createList(L, a, 10);
57     printf("原始线性表:\n");
58     dispList(L);
59     delnode1(L, 3);
60     printf("删除 3 后:\n");
61     dispList(L);
62     delnode2(L, 4);
63     printf("删除 4 后:\n");
64     dispList(L);
65     return 0;
66 }

轻点加号,代码即现

运行结果在这儿*^_^*

原始线性表:
0 1 2 3 4 5 6 7 8 9
删除 3 后:
0 1 2 4 5 6 7 8 9
删除 4 后:
0 1 2 5 6 7 8 9

原文地址:https://www.cnblogs.com/flow-wangqi/p/9508865.html

时间: 2024-11-05 21:34:28

顺序表删除值为 x 的元素的相关文章

数据结构顺序表删除所有特定元素x

顺序表类定义: 1 template<class T> 2 class SeqList : 3 { 4 public: 5 SeqList(int mSize); 6 ~SeqList() 7 { 8 delete[] elements; 9 } 10 bool SM_Delete(T x); 11 private: 12 int maxLength; 13 T *elements; 14 }; 15 template <class T> 16 SeqList<T>::

顺序表添加与删除元素以及 php实现顺序表实例

对顺序表的操作,添加与删除元素. 增加元素 如下图所示  对顺序列表 Li [1328,693,2529,254]  添加一个元素 111 ,有三种方式: a)尾部端插入元素,时间复杂度O(1);    保证了原始顺序列表的顺序. b)非保序的加入元素(不常见),时间复杂度O(1);   打乱了原始顺序列表的顺序. c)保需的元素插入,时间复杂度O(n);    保证了原始顺序列表的顺序. 删除元素 如下图所示  对顺序列表 Li [1328,693,2529,254]  删除元素 ,有三种方式

线性表之顺序表C++实现

线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件#include<iostream> const int MaxSize = 100;//定义顺序表SeqList的模板类template<class DataType>class SeqList{public: //顺序表无参构造器(创建一个空的顺序表) SeqList(){ length = 0 } //顺序表有参构造器(创建一个长度为n的顺序表) SeqList(DataType array[], int

我的线性表(顺序表)

啦啦啦……写了将近一上午,功能不太全,只写了老师要求写的功能,待会儿我把其他功能补充下再粘贴一个 这个只有1:定义线性表,2:初始化线性表,3:删除第i个位置的元素,4:删除值为e的元素,5:查找第i个位置上的元素,6:打印顺序表 7:销毁顺序表 #include <stdio.h> #include <malloc.h> #define LISTINCREMENT 10 typedef struct { int *elem; int length; int listsize; }

顺序表应用2:多余元素删除之建表算法

顺序表应用2:多余元素删除之建表算法 Description 一个长度不超过10000数据的顺序表,可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只保留第一个).要求:       1.必须先定义线性表的结构与操作函数,在主函数中借助该定义与操作函数调用实现问题功能:       2.本题的目标是熟悉在顺序表原表空间基础上建新表的算法,要在原顺序表空间

顺序表应用1:多余元素删除之移位算法

顺序表应用1:多余元素删除之移位算法 Description 一个长度不超过10000数据的顺序表,可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只保留第一个).要求:       1.必须先定义线性表的结构与操作函数,在主函数中借助该定义与操作函数调用实现问题功能:       2.本题的目标是熟悉顺序表的移位算法,因此题目必须要用元素的移位实现删除

简单顺序表的插入,删除,指定位置,指定元素的插入删除操作

头文件 SeqList.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<stdio.h> #include<string.h> #include<assert.h> #define MAX_SIZE 10 typedef int DataType; typedef unsigned int size_t; typedef struct SeqList { DataType array[MAX_SIZE]; s

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

顺序表的非递减数列合并

#include<stdio.h> /*包含输入输出头文件*/ #define ListSize 100 typedef int DataType; typedef struct { DataType list[ListSize]; int length; }SeqList; void InitList(SeqList *L) /*将线性表初始化为空的线性表只需要把线性表的长度length置为0*/ { L->length=0; /*把线性表的长度置为0*/ } int ListEmpt