1.集合结构中元素不能重复

2.typedef---->对已有的数据类型起一个别名

#include"stdafx.h"
#include<assert.h>
#include<iostream>
using namespace std;
#define N 10typedef int ElemType;
typedef struct {ElemType  *data;int count;int n;
}SeqList;
//初始化
void Init_Seq(SeqList *melist){assert(melist != NULL);melist->data = (ElemType*)malloc(sizeof(ElemType)*melist->count);melist->count = 0;melist->n = N;if (melist->data == NULL){cout << endl;exit(EXIT_FAILURE);}
}//打印
void Print_Seq(SeqList *melist){assert(melist != NULL);for (int i = 0; i < melist->count; i++){cout << melist->data[i]<<"   ";}cout << endl;
}
//查找函数
int Find_Val(SeqList *melist,ElemType val){assert(melist != NULL);int tag = -1,i=0;while (i < melist->count){if (melist->data[i] == val){tag = i;break;}}return tag;
}
//插入数值
void Insert_Iteam(SeqList *melist, int m, int val){assert(melist != NULL);if (melist->n == melist->count){cout << "顺序表已满!" << endl;}if (m<0||m>melist->count){cout << "插入位置不合法!" << endl;}if (melist->count == m){melist->data[m] = val;}else{int i;for ( i = melist->count ; i > m; i--){melist->data[i] = melist->data[i-1];}melist->data[i] = val;melist->count++;}
}
顺序表尾部插入顺序表头部插入void Push_Back(SeqList *melist, ElemType val){assert(melist != NULL);int i = melist->count;melist->count++;melist->data[i] = val;}
//顺序表头部插入
void Push_front(SeqList *melist, ElemType val){assert(melist != NULL);melist->count++;int i;for ( i = melist->count; i > 0; i--){melist->data[i] = melist->data[i - 1];}melist->data[i] = val;
}
///
int main(){SeqList plist = {};Init_Seq(&plist);for (int i = 0; i < 5; i++){plist.data[i] = i;plist.count++;}Print_Seq(&plist);/*int val = 9;int index = Find_Val(&plist, val);cout << index << endl;int n = 2;int val = 8;Insert_Iteam(&plist, n, val);*/int val = 8;//Push_Back(&plist, val);Push_front(&plist, val);Print_Seq(&plist);cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;return 0;}#if 0
///
int main(){SeqList plist = {};Init_Seq(&plist);int arr[] = { 1, 2, 3, 4, 5 };plist.data = { arr };plist.count = 5;Print_Seq(&plist);/*int val = 9;int index = Find_Val(&plist, val);cout << index << endl;int n = 2;int val = 8;Insert_Iteam(&plist, n, val);*/int val = 9;//Push_Back(&plist,val);Print_Seq(&plist);cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;return 0;}#endif

1.顺序表增容

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#define doub 2
using namespace std;
#define N 2typedef int ElemType;
typedef struct {ElemType  *data;int count;int n;
}SeqList;
//初始化
bool Double_n(SeqList *melist);
void Init_Seq(SeqList *melist){assert(melist != NULL);melist->data = (ElemType*)malloc(sizeof(ElemType)*melist->count);melist->count = 0;melist->n = N;if (melist->data == NULL){cout << endl;exit(EXIT_FAILURE);}
}//打印
void Print_Seq(SeqList *melist){assert(melist != NULL);cout << "count=" << melist->count <<endl;cout << "总容量=" << melist->n << endl;for (int i = 0; i < melist->count; i++){cout << melist->data[i]<<"   ";}cout << endl;
}
//查找函数
int Find_Val(SeqList *melist,ElemType val){assert(melist != NULL);int tag = -1,i=0;while (i < melist->count){if (melist->data[i] == val){tag = i;break;}}return tag;
}
//判满
bool Full_Seq(SeqList *melist){assert(melist != NULL);return melist->count == melist->n;}
//插入数值
void Insert_Iteam(SeqList *melist, int m, int val){assert(melist != NULL);if (m<0 || m>melist->count){cout << "插入位置不合法!" << endl;}if (Full_Seq(melist) && !Double_n(melist)){cout << "堆区插入失败!" << endl;}if (melist->count == m){melist->data[m] = val;}else{int i;for ( i = melist->count ; i > m; i--){melist->data[i] = melist->data[i-1];}melist->data[i] = val;melist->count++;}
}
顺序表尾部插入顺序表头部插入void Push_Back(SeqList *melist, ElemType val){assert(melist != NULL);Insert_Iteam(melist, melist->count, val);
}
//顺序表头部插入
void Push_front(SeqList *melist, ElemType val){assert(melist != NULL);if (Full_Seq(melist) ){cout << "堆区插入失败!" << endl;}melist->count++;int i;for (i = melist->count; i > 0; i--){melist->data[i] = melist->data[i - 1];}melist->data[i] = val;
}
//空间变为原来的二倍
bool Double_n(SeqList *melist){assert(melist != NULL);int total = doub*(melist->n);ElemType *newdata = NULL;newdata = (ElemType*)malloc(sizeof(ElemType)*melist->n);if (NULL == newdata){return false;}for (int i = 0; i < melist->count; i++){newdata[i] = melist->data[i];}free(melist->data);melist->data = newdata;melist->n = total;return true;
}
///
int main(){SeqList plist = {};Init_Seq(&plist);/*int val = 9;int index = Find_Val(&plist, val);cout << index << endl;int n = 2;int val = 8;Insert_Iteam(&plist, n, val);*///Push_Back(&plist, val);for (int i = 0; i < 20; i++){Push_front(&plist, i);Print_Seq(&plist);}cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;return 0;}#if 0
///
int main(){SeqList plist = {};Init_Seq(&plist);int arr[] = { 1, 2, 3, 4, 5 };plist.data = { arr };plist.count = 5;Print_Seq(&plist);/*int val = 9;int index = Find_Val(&plist, val);cout << index << endl;int n = 2;int val = 8;Insert_Iteam(&plist, n, val);*/int val = 9;//Push_Back(&plist,val);Print_Seq(&plist);cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;return 0;}#endif

1.顺序表删除元素

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#define INDEX_ERROR -1
#define EMPTY -2
#define doub 2
#define OK 1
using namespace std;
#define N 100
typedef int Status;
typedef int ElemType;
typedef struct {ElemType  *data;int count;int n;
}SeqList;
//初始化
bool Double_n(SeqList *melist);
void Init_Seq(SeqList *melist){assert(melist != NULL);melist->data = (ElemType*)malloc(sizeof(ElemType)*melist->count);melist->count = 0;melist->n = N;if (melist->data == NULL){cout << endl;exit(EXIT_FAILURE);}
}//打印
void Print_Seq(SeqList *melist){assert(melist != NULL);cout << "count=" << melist->count <<endl;cout << "总容量=" << melist->n << endl;for (int i = 0; i < melist->count; i++){cout << melist->data[i]<<"   ";}cout << endl;
}
//查找函数
int Find_Val(SeqList *melist,ElemType val){assert(melist != NULL);int tag = -1,i=0;while (i < melist->count){if (melist->data[i] == val){tag = i;break;}}return tag;
}
//判满
bool Full_Seq(SeqList *melist){assert(melist != NULL);return melist->count == melist->n;}
//插入数值
void Insert_Iteam(SeqList *melist, int m, int val){assert(melist != NULL);if (m<0 || m>melist->count){cout << "插入位置不合法!" << endl;}if (Full_Seq(melist) && !Double_n(melist)){cout << "堆区插入失败!" << endl;}if (melist->count == m){melist->data[m] = val;}else{int i;for ( i = melist->count ; i > m; i--){melist->data[i] = melist->data[i-1];}melist->data[i] = val;melist->count++;}
}
顺序表尾部插入顺序表头部插入void Push_Back(SeqList *melist, ElemType val){assert(melist != NULL);Insert_Iteam(melist, melist->count, val);
}
//顺序表头部插入
void Push_front(SeqList *melist, ElemType val){assert(melist != NULL);if (Full_Seq(melist) ){cout << "堆区插入失败!" << endl;}melist->count++;int i;for (i = melist->count; i > 0; i--){melist->data[i] = melist->data[i - 1];}melist->data[i] = val;
}
//空间变为原来的二倍
bool Double_n(SeqList *melist){assert(melist != NULL);int total = doub*(melist->n);ElemType *newdata = NULL;newdata = (ElemType*)malloc(sizeof(ElemType)*melist->n);if (NULL == newdata){return false;}for (int i = 0; i < melist->count; i++){newdata[i] = melist->data[i];}free(melist->data);melist->data = newdata;melist->n = total;return true;
}
//判空
bool Empty_Seq(SeqList *melist){assert(melist != NULL);if (melist->count == 0){return true;}else return false;
}
//删除指定位置的元素
void Delete_Seq(SeqList *melist, int pos){assert(melist != NULL);if (pos < 0 || pos >= melist->count){cout << "INDEX_ERROR" << endl;}if (Empty_Seq(melist)){cout << "EMPTY" << endl;}for (int i = pos; i < melist->count - 1; i++){melist->data[i] = melist->data[i + 1];}melist->count--;
}
///
int main(){SeqList plist = {};Init_Seq(&plist);/*int val = 9;int index = Find_Val(&plist, val);cout << index << endl;int n = 2;int val = 8;Insert_Iteam(&plist, n, val);*///Push_Back(&plist, val);for (int i = 0; i < 7; i++){Push_front(&plist, i);}Print_Seq(&plist);int pos = 3;Delete_Seq(&plist, pos);Print_Seq(&plist);cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;return 0;}#if 0
///
int main(){SeqList plist = {};Init_Seq(&plist);int arr[] = { 1, 2, 3, 4, 5 };plist.data = { arr };plist.count = 5;Print_Seq(&plist);/*int val = 9;int index = Find_Val(&plist, val);cout << index << endl;int n = 2;int val = 8;Insert_Iteam(&plist, n, val);*/int val = 9;//Push_Back(&plist,val);Print_Seq(&plist);cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;return 0;}#endif

央视别的顶级文案  耶耶耶!

1.顺序表合并

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#define INDEX_ERROR -1
#define EMPTY -2
#define doub 2
#define OK 1
using namespace std;
#define N 100
typedef int Status;
typedef int ElemType;
typedef struct {ElemType  *data;int count;int n;
}SeqList;
//初始化
bool Double_n(SeqList *melist);
void Init_Seq(SeqList *melist){assert(melist != NULL);melist->data = (ElemType*)malloc(sizeof(ElemType)*melist->count);melist->count = 0;melist->n = N;if (melist->data == NULL){cout << endl;exit(EXIT_FAILURE);}
}//打印
void Print_Seq(SeqList *melist){assert(melist != NULL);cout << "count=" << melist->count << endl;cout << "总容量=" << melist->n << endl;for (int i = 0; i < melist->count; i++){cout << melist->data[i] << "   ";}cout << endl;
}
//查找函数
int Find_Val(SeqList *melist, ElemType val){assert(melist != NULL);int tag = -1, i = 0;while (i < melist->count){if (melist->data[i] == val){tag = i;break;}}return tag;
}
//判满
bool Full_Seq(SeqList *melist){assert(melist != NULL);return melist->count == melist->n;}
//插入数值
void Insert_Iteam(SeqList *melist, int m, int val){assert(melist != NULL);if (m<0 || m>melist->count){cout << "插入位置不合法!" << endl;}if (Full_Seq(melist) && !Double_n(melist)){cout << "堆区插入失败!" << endl;}if (melist->count == m){melist->data[m] = val;}else{int i;for (i = melist->count; i > m; i--){melist->data[i] = melist->data[i - 1];}melist->data[i] = val;melist->count++;}
}
顺序表尾部插入顺序表头部插入void Push_Back(SeqList *melist, ElemType val){assert(melist != NULL);Insert_Iteam(melist, melist->count, val);
}
void Push_front(SeqList *melist, ElemType val){assert(melist != NULL);if (Full_Seq(melist)){cout << "堆区插入失败!" << endl;}melist->count++;if (melist->count == 1){melist->data[melist->count] = val;}int i;for (i = melist->count; i > 0; i--){melist->data[i] = melist->data[i - 1];}melist->data[i] = val;
}
//空间变为原来的二倍
bool Double_n(SeqList *melist){assert(melist != NULL);int total = doub*(melist->n);ElemType *newdata = NULL;newdata = (ElemType*)malloc(sizeof(ElemType)*melist->n);if (NULL == newdata){return false;}for (int i = 0; i < melist->count; i++){newdata[i] = melist->data[i];}free(melist->data);melist->data = newdata;melist->n = total;return true;
}
//判空
bool Empty_Seq(SeqList *melist){assert(melist != NULL);if (melist->count == 0){return true;}else return false;
}
//删除指定位置的元素
void Delete_Seq(SeqList *melist, int pos){assert(melist != NULL);if (pos < 0 || pos >= melist->count){cout << "INDEX_ERROR" << endl;}if (Empty_Seq(melist)){cout << "EMPTY" << endl;}if (pos == melist->count - 1){melist->count--;}else{for (int i = pos; i < melist->count - 1; i++){melist->data[i] = melist->data[i + 1];}melist->count--;}
}
//删除顺序表最后一个元素
void Pop_Back(SeqList *melist){assert(melist != NULL);int pos = melist->count - 1;Delete_Seq(melist, pos);
}
//删除顺序表第一个元素//删除顺序表中的重复元素
void Delete_comp(SeqList *plist){assert(plist != NULL);if (Empty_Seq(plist)){cout << "顺序表为空!" << endl;}for (int i = 0; i < plist->count - 1; i++){int k = plist->data[i];for (int j = i + 1; j < plist->count; j++){if (k == plist->data[j]){Delete_Seq(plist, j);}}}
}
//删除顺序表所有重复的元素 优化
void Delete_Comp_Plus(SeqList *plist, int val){int i = -1;for (int j = 0; j < plist->count; j++){if (plist->data[j] != val){i = i + 1;plist->data[i] = plist->data[j];}}plist->count = i + 1;
}
//合并两个顺序表
void MergeList_Seq(SeqList *plista, SeqList *plistb, SeqList *plistc){assert(plista != NULL&&plistb != NULL&&plistc != NULL);plistc->count = plistc->n = plista->count + plistb->count;plistc->data = (ElemType*)malloc(sizeof(ElemType)*plistc->count);ElemType *pa, *pb, *pc, *pa_last, *pb_last;pa = plista->data;pb = plistb->data;pc = plistc->data;pa_last = pa + plista->count - 1;pb_last = pb + plistb->count - 1;while (pa <= pa_last&&pb <= pb_last){if (*pa <= *pb)  {*pc++ = *pa++;}else if (*pa > *pb) {*pc++ = *pb++;}}while (pb <= pb_last){*pc++ = *pb++;}while(pa <= pa_last){*pc++ = *pa++;}
}
///
int main(){ElemType arr_a[5] = { 1, 3, 5, 7, 9 };ElemType arr_b[7] = { 2, 4, 6, 8, 10, 12,14 };SeqList plista = {};SeqList plistb = {};SeqList plistc = {};Init_Seq(&plista);Init_Seq(&plistb);Init_Seq(&plistc);/*int val = 9;int index = Find_Val(&plist, val);cout << index << endl;int n = 2;int val = 8;Insert_Iteam(&plist, n, val);*///Push_Back(&plist, val);for (int i = 4; i >=0; i--){Push_front(&plista, arr_a[i]);}for (int i = 6; i >= 0; i--){Push_front(&plistb, arr_b[i]);}cout << "顺序表a:" << endl;Print_Seq(&plista);cout << "顺序表b:" << endl;Print_Seq(&plistb);MergeList_Seq(&plista, &plistb, &plistc);cout << "顺序表c为:" << endl;Print_Seq(&plistc);cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;return 0;}

耶耶耶!VS算是被我玩明白了  如果运行不出来  可以多运行几次~

2。好吧  真的是富贵险中求

2.对数组进行逆序处理

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
void Swap(int a, int b){int t = a;a = b;b = t;
}
void Exchege_Arr(int *nums, int n){if (n % 2 == 1){int k = n / 2;int i = 1;while (i <= k){swap(nums[k - i], nums[k + i]);i++;}}else if (n % 2 == 0){int k = n / 2 - 1;int t = k + 1;int i = 1;while (i <= k+1){swap(nums[t - i], nums[k + i]);i++;}}
}void Print_Arr(int *nums, int n){for (int i = 0; i < n; i++){cout << nums[i] << "   ";}cout << endl;
}
int main(){int arr[] = { 1, 2, 3, 4, 5, 6 };int n = sizeof(arr) / sizeof(arr[0]);Print_Arr(arr, n);Exchege_Arr(arr, n);Print_Arr(arr, n);cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;
}

1.在用Swap_Arr做交换时,如果是间接交换(采用指针的方式交换的话,int *t不能为空  不能为空!!!!!!!)

void Swap(int *a, int *b){int c= 5;int *t=&c;*t = *a;*t= *a;*a =*b;*b = *t;
}

给我写emo了……

2.旋转数组的三种方法

(1).最普通的循环

(2).牺牲时间复杂度来提高空间复杂度--->开辟新空间,比较大小,从后往前依此插入,再将新空间中的元素依此还给原空间,释放新空间。

(3).第一步:逆置整个数组。二:逆置0->k-1。三:逆置k-->n-1

算了  上代码

#include"stdafx.h"
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
void Swap(int *a, int *b){assert(a != NULL&&b != NULL);int c= 5;int *t=&c;*t = *a;*t= *a;*a =*b;*b = *t;
}
void Exchege_Arr_D(int *nums, int left, int right){assert(nums != NULL);while (left <right){Swap(&(nums[left++]), &(nums[right--]));}}void Print_Arr(int *nums, int n){assert(nums != NULL);for (int i = 0; i < n; i++){cout << nums[i] << "   ";}cout << endl;
}
void Exchege_Arr_F(int *arr, int k,int n){assert(arr != NULL);if (n == 0)  return;Exchege_Arr_D(arr, 0, n - 1);Exchege_Arr_D(arr, 0, k - 1);Exchege_Arr_D(arr, k, n - 1);
}
int main(){int arr[] = { 1, 2, 3, 4, 5, 6 };int n = sizeof(arr) / sizeof(arr[0]);cout << "元素个数:" << n << endl;Print_Arr(arr, n);Exchege_Arr_F(arr, 3, n);Print_Arr(arr, n);cout << "幸得识卿桃花面,从此阡陌多暖春!" << endl;
}

数据结构与算法分析----顺序表相关推荐

  1. 数据结构之——《顺序表》

    数据结构之--<顺序表> 1.含义 2.分类 3.接口函数实现 4.顺序表的优缺点 1.含义 顺序表示用一段纹理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组 ...

  2. 【数据结构】【顺序表】 SqList *L与SqList*L的区别

    [数据结构][顺序表] SqList *&L与SqList*L的区别 显然,对于顺序表的抽象数据模型中的函数,其参数使用各不相同. SqList *&L的情况 它的意思是,L是对Lis ...

  3. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

  4. java数据结构实验一顺序表,java数据结构实验代码之升序顺序表

    java数据结构实验代码之升序顺序表 数据结构实验报告 学院:管理学院 班级:13电子商务(1)班 姓名:廖秋君 学号:3213004779 2014年 10月 23 日 目录 一.需求分析----- ...

  5. 数据结构之基于顺序表的插入排序

    基于顺序表的插入排序(常规插入排序,二分插入排序,希尔排序) 这三种的都是插入排序算法的时间复杂度基本相似,但由于希尔排序不同于其他排序方式的思想,所以其时间复杂度会有所不同. 常规插入排序:O(n2 ...

  6. 数据结构与算法 | 顺序表

    顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删查改. 对于表,栈,队列,树,图等等数据结构,我们都可通过选择顺序结构或者链式结构来进行实 ...

  7. 数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o

    目录 前言 一.顺序表的定义 二.顺序表的初始化 三.顺序表的建立 四.顺序表的输出 五.顺序表的逆序输出 六.顺序表的插入操作 七.顺序表的删除操作 八.顺序表的按位和按值查找 基本操作的完整代码 ...

  8. c语言编程文件中删除数据结构,C语言数据结构实战(一)顺序表的插入与删除

    今天学习了思成老师的数据结构实战教程 写了一个顺序表 插入和删除的操作 把源码共享给大家 一共包括list.c stu.h main.c list.h   .h文件是头文件 需要引入 具体的功能我都已 ...

  9. 数据结构与算法顺序表数组版

    博主还在学校,写网络编程特别是后面的线程和多路I/O实在是太费精力,所以博主先把数据结构多跟新一点,也正好把学校的C语言数据结构的作业做了,正好一举两得 这个内容比较简单,就不再细说. #includ ...

  10. python数据结构之线性顺序表

    线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.本文结合了互联网上的一些代码,以及结合百度百科关于线性顺序表的定义,实现了全部代码. 在稍复杂的线性 ...

最新文章

  1. java B2B2C Springcloud多租户电子商城系统-消息驱动的微服务(消费分区)
  2. 桌面程序调用Web Service应用实例
  3. java try catch嵌套_try catch里面try catch嵌套
  4. javasript 操作option select
  5. javascript进制转换_JavaScript 加减危机——为什么会出现这样的结果?
  6. Python学习入门5:Python到底应该怎么学?
  7. 抢饭碗?这位 05 后开发三款小程序!
  8. vba 判断目标单元格内容改变的代码_【VBA小代码】批量改变单元格部分字符格式...
  9. 第十二章 网络搭建及训练
  10. oozie控制台命令
  11. 手机无法弹出允许usb调试解决方法
  12. 计算机显卡驱动全部卸载,如何卸载显卡驱动重新安装?Win10卸载显卡驱动+重装显卡驱动的方法...
  13. 南京应用计算机学校排名,南京软件工程专业比较好的17所大学推荐
  14. [poj 1741]Tree 点分治
  15. ❥呕心沥血系列❥-- Linux基础
  16. 氢键H-H的博客目录
  17. cross_val_score 如何传入early_stopping_rounds等参数 用于 fit
  18. Lora VS NB-IoT
  19. okhttp使用总结
  20. deepin20.1安装的kodi17.6无法搜索pvr-iptvsimple插件的解决方法

热门文章

  1. 计算机上显示找不到无线网络连接,电脑上网时为什么只显示宽带连接不显示无线网络连接?...
  2. EEE(Energy Efficient Ethernet)-节能以太网
  3. win10街头篮球服务器维护中,win10系统玩街头篮球游戏延迟不顺畅的处理技巧
  4. mybaties中resultMap和resultType的区别
  5. [转载]OFDM基本原理及系统框图
  6. 金莹江苏省计算机学会教授,第二届江苏省青年计算机精英论坛”在江南大学举行...
  7. python读取pcd文件_(一)读取PCD文件
  8. Environment 概述
  9. linux free空闲内存用尽,Linux中显示空闲内存空间的free命令的基本用法
  10. drupal 8 php filter,Drupal 7 与 Drupal 8 的一些变化