1.数据结构脑图(未完)
2.次序表其他操作
3.功能函数封装
4 完整代码
1>头文件test.h
- #ifndef __TEST_H__
- #define __TEST_H__
- #include<stdlib.h>
- #include<stdio.h>
- #include<string.h>
- //宏定义 线性表的最大容量
- #define MAX 30
- //类型重定义 表示要存放的数据的类型
- //typedef int datatype;
- //定义顺序表的结构图类型
- typedef struct sequence
- {
- int data[MAX];
- int len;
- }seqlist,*seqlistPtr;
- //创建顺序表
- seqlistPtr seq_create();
- //判空
- int empty(seqlistPtr S);
- //判满
- int fill(seqlistPtr S);
- //尾部插入数据
- int seq_add(seqlistPtr S,int e);
- //遍历
- void show(seqlistPtr S);
- //任意位置插入1
- int insert(seqlistPtr S,int index,int value);
- //任意位置插入2
- int index_add(seqlistPtr S,int index,int e);
- //任意位置删除
- int index_del(seqlistPtr S,int index);
- //任意位置修改
- void index_change(seqlistPtr S,int index,int e);
- //按值查找
- int value_index(seqlistPtr S, int e);
- //去重
- void repeat(seqlistPtr S);
- //销毁
- void my_free(seqlistPtr *S);
- #endif
复制代码 2.>源文件test.c
- #include "test.h"
- //1.
- // 创建一个顺序表
- seqlistPtr seq_create()
- {//在堆区申请顺序表的大小空间,返回主程序使用
- seqlistPtr S=(seqlistPtr)malloc(sizeof(seqlist));
- //判断申请空间是否合法
- if (NULL==S)
- {
- printf("创建失败\n");
- return NULL;
- }
- printf("创建成功\n");
- //顺序表长度置零
- S->len=0;
- //数组清空
- memset(S->data,0,sizeof(S->data));
- return S;
- }
- //2
- // 判空
- int empty(seqlistPtr S)
- {
- //判断接受的顺序表是否为空
- if (NULL==S)
- {
- printf("判空失败\n");
- return -1;
- }
- //判断顺序表长度是否为0
- return S->len==0;
- }
- //3.
- // 判满
- int fill(seqlistPtr S)
- {
- if (NULL==S)
- {
- printf("判满失败\n");
- return -1;
- }
- //判断顺序表的长度和顺序表长度最大容量是否相等
- return S->len==MAX;
- }
- //4.
- // 顺序表的增加
- int seq_add(seqlistPtr S,int e)
- {
- //判断接受的顺序表是否合法
- //判满
- if (NULL==S ||fill(S))
- {
- printf("增加失败\n");
- return 0;
- }
- //放入数据
- S->data[S->len]=e;
- //增加成功 顺序表长度自增
- S->len++;
- return 1;
- }
- //5
- // 顺序表的遍历
- void show(seqlistPtr S)
- {
- //判断接受的顺序表是否合法
- //判空
- if (NULL==S ||empty(S))
- {
- printf("遍历失败\n");
- return ;
- }
- for (int i=0;i<S->len;i++)
- {
- printf("%d ",S->data [i]);
- }
- printf("\n");
- }
- //6
- // 在顺序表插入一个数
- int insert(seqlistPtr S,int index,int value)
- {
- if (index <0||index>S->len||S->len>=MAX)
- {
- printf("插入位置不合法\n");
- return 0;
- }
- for (int i=S->len;i>index;i--)
- {
- S->data[i]=S->data[i-1];
- }
- S->data[index]=value;
- S->len++;
- return 1 ;
- }
- //7.
- //在顺序表插入一个数方法2
- int index_add(seqlistPtr S,int index,int e)
- {
- if (NULL==S||fill(S)||index<=0||index>S->len+1)
- {
- printf("插入失败\n");
- return 0;
- }
- // 插入位置对应下标
- index= index-1;
- for(int i=0;i<S->len-index;i++)
- {
- S->data[S->len-i]=S->data[S->len-1-i];
- }
- S->data[index]=e;
- S->len++;
- return 1;
- }
- //8.
- // 任意位置删除
- int index_del(seqlistPtr S,int index)
- {
- if (NULL==S||empty(S)||index<0||index>S->len)
- {
- printf("删除失败\n");
- return 0;
- }
- // index-=1;
- for(int i= index;i<S->len;i++)
- {
- S->data[i]=S->data[i+1];
- }
- S->len--;
- return 1;
- }
- //9.
- // 通过位置修改
- void index_change(seqlistPtr S,int index,int e)
- {
- if (NULL==S||empty(S)||index<0||index>S->len)
- {
- printf("修改失败\n");
- return ;
- }
- //修改
- // S->data[index-1]=e;
- S->data[index]=e;
- }
- //10
- // 根据值查找下标
- int value_index(seqlistPtr S, int e)
- {
- if (NULL==S||empty(S))
- {
- printf("查找失败");
- return -1;
- }
- for (int i=0;i<S->len;i++)
- {
- if (S->data[i]==e)
- {
- printf("%d \n",i);
- return i;
- }
- }
- printf("查无此数");
- return -1;
- }
- //11
- // 去除重复数据
- void repeat(seqlistPtr S)
- {
- if (NULL==S||S->len<=1)
- { printf("去重失败");
- return;
- }
- for (int i=0;i<S->len;i++)
- {
- for(int j=i+1;j<S->len;j++)
- if (S->data[i]==S->data[j])
- {
- index_del (S,j);
- j--;
- }
- }
- }
- // 12
- // 释放内存
- void my_free(seqlistPtr *S)
- {
- if(NULL==*S)
- {
- printf("销毁失败");
- return ;
- }
- free (*S);
- S=NULL ;
- printf("销毁成功");
- }
复制代码 3>测试文件main.c
- #include "test.h"
- int main(int argc, const char *argv[])
- {
- //创建顺序表
- seqlistPtr S=seq_create();
- //顺序表的增加(尾插)
- seq_add(S,10);
- seq_add(S,20);
- seq_add(S,30);
- seq_add(S,40);
- seq_add(S,50);
- show(S);
- //任意位置插入数据1方法
- insert(S,0,1);
- insert(S,1,2);
- insert(S,2,3);
- show(S);
- //任意位置插入数据2方法
- index_add(S,5,666);
- show(S);
- //删除指定位置的数据
- index_del(S,0);
- show(S);
- //修改指定位置数据
- index_change(S,0,99);
- show(S);
- //按值查找
- value_index(S,666);
- show(S);
- //按值查找并删除
- index_del(S,value_index(S,666));
- show(S);
- //尾部插入多个数据
- seq_add(S,10);
- seq_add(S,20);
- seq_add(S,30);
- seq_add(S,10);
- seq_add(S,10);
- seq_add(S,20);
- seq_add(S,20);
- seq_add(S,40);
- seq_add(S,30);
- seq_add(S,50);
- show(S);
- //去重
- repeat(S);
- show(S);
-
- return 0;
- }
复制代码 后续→c语言——数据结构【链表:单向链表】-CSDN博客
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |