数据结构--顺序表的实现
来源:互联网 发布:推荐个苹果下载软件 编辑:程序博客网 时间:2024/06/05 16:24
#include <stdio.h>#include <stdbool.h>#include <stdlib.h>typedef int ElementType;typedef struct Node *Sequence_list;struct Node{//***********************int m_capacity; //数组的最大容量 *int m_size;//数组当前存储元素的个数*ElementType *array; //存放元素的数组*};//***********************Sequence_list Create(){int capacity, size;Sequence_list list;printf("数组容量: ");scanf("%d", &capacity); //*******************list = malloc(sizeof(struct Node)); //为结构体分配内存 *list->array = malloc(sizeof(ElementType) * capacity); //为数组分配内存 *list->m_capacity = capacity; //储存数组的最大容量* //*******************printf("输入初始化表的元素个数:");scanf("%d", &size);while (size > list->m_capacity) {printf("超过初始化数组的容量,重新输入:");scanf("%d", &size);}list->m_size = size; //数组已经存储的元素个数for (int i = 0; i != size; i++) {printf("第%d个元素的值: ", i + 1);scanf("%d", &list->array[i]);}return list;}//按值查找元素int Find(Sequence_list list, ElementType element){int i = 0;if (list == NULL) { //检查顺序表是否已经初始化printf("顺序表未初始化\n");return -1;}//list->m_size表示最后一个元素的下标while (i != list->m_size - 1 && element != list->array[i])++i;if (element == list->array[i])return i;return -1;}/************************************************** *要插入一个元素,首先要检查数组是否还有空余的位置* *如果有,就把插入位置的元素以及其后面的元素全部向* *右动一个位置,为新的元素空出一个位置,然后插入 * **************************************************/void Insert(Sequence_list list, ElementType element, int position){if (list == NULL) {printf("顺序表未初始化\n");return;}if (list->m_size == list->m_capacity){ //检查是否有空余的位置printf("顺序表已满\n");return;} //****************************************if (position < 1 || position > list->m_capacity) { //检查位置的合法性,因为数组的下标从0开始*printf("位置不合法\n"); //在插入的时候需要将位置减1才能得到插入 *return; //位置的下标*} //****************************************for (int i = list->m_size - 1; i >= position - 1; i--) //将元素向右移动一个位置list->array[i+1] = list->array[i];list->array[position-1] = element;//插入元素++list->m_size;//更新当前元素个数}/*********************************************** * 和插入元素的操作类似,首先要先检查是否是空表* * 而且还要检查位置的合法性。然后将要删除的元素* * 之后的元素全部向左移动一个位置,覆盖掉要删除* * 的元素,然后更新当前数组的元素个数 * ***********************************************/void Remove(Sequence_list list, int position){if (list == NULL) {printf("顺序表未初始化\n");return;}if (!list->m_size){printf("空表\n");return;}if (position < 1 || position > list->m_size) {printf("位置不合法\n");return;} //注意是从position开始移动,因为这个位置是要删除元素的下一个元素for (int i = position; i <= list->m_size - 1; i++) //移动元素,覆盖掉要删除的元素list->array[i-1] = list->array[i];--list->m_size; //更新当前数组的元素个数}void Print(Sequence_list list) {if (list == NULL) {printf("顺序表未初始化\n");return;}for (int i = 0; i != list->m_size; i++)printf("%d ", list->array[i]);printf("\n");}//测试代码int main(void){Sequence_list list = NULL;int option, position;while (true){printf("1.创建顺序表\n2.按值查找元素\n3.插入元素\n4.删除元素\n5.输出全部元素\n");printf("选择:");while (scanf("%d", &option) != 1) {getchar();printf("错误,重新选择: ");}switch (option){case 1: list = Create();break;case 2: printf("查找的元素值:");scanf("%d", &option);if (Find(list, option) != -1)printf("元素存在\n");elseprintf("元素不存在\n");break;case 3: printf("输入插入的元素和位置:");scanf("%d %d", &option, &position);Insert(list, option, position);break;case 4: printf("输入要删除元素的位置:");scanf("%d", &position);Remove(list, position);break;case 5: Print(list);break;}}return 0;}
阅读全文
0 0
- 数据结构--顺序表的实现
- 数据结构顺序表的实现
- 数据结构顺序表的实现
- 数据结构----顺序表的实现
- 【数据结构】顺序表的实现
- 数据结构顺序表实现
- 数据结构的实现——顺序表
- 数据结构(C++)顺序表的实现
- 数据结构的C实现_顺序表
- 数据结构-----顺序表与单链表的实现
- 数据结构线性表顺序结构的实现
- 1-java数据结构顺序表的实现
- 数据结构---线性表的顺序实现
- [c语言]数据结构 顺序表的实现
- 实现数据结构顺序表的基本操作
- 数据结构之栈的顺序表实现
- 数据结构之顺序表的实现
- 数据结构顺序表的代码实现
- [转] quanke 设计模式Java版
- 如何计算系统用户并发数,系统最大并发数
- caffe 利用python API 将数据转成lmdb格式的数据
- python判断一个数是否是回数
- Linux下的U盘挂载问题-mount: unknown filesystem type ‘ntfs’
- 数据结构--顺序表的实现
- 2017-11-09
- java多线程
- Java中Servlet生命周期解析第二弹「Web工程师必读」
- C语言经典笔试题04-字符数组移位
- hdu1233还是畅通工程
- 每日一练-20171109
- java三大神器之拦截器
- 如何搭建OwnCloud