数据结构 - 线性表之顺序表 (c 语言)
来源:互联网 发布:linux mysql 存放路径 编辑:程序博客网 时间:2024/05/01 05:35
SeqList.h
#ifndef _SEQLIST_H_#define _SEQLIST_H_#include "stdio.h"#include "malloc.h"#include "assert.h"#define SEQLIST_INIT_SIZE 8typedef int ElemType;typedef struct SeqList{ElemType *base;int capacity; //容量 int size; //大小 }SeqList;void InitSeqList(SeqList *list);void push_back(SeqList *List, ElemType);void push_front(SeqList *List, ElemType);void show_list(SeqList*List);void pop_back(SeqList * List);void pop_front(SeqList *List);void insert_pos(SeqList* List, int, ElemType);int find(SeqList *List, ElemType);int length(SeqList *List);void delete_pos(SeqList*List, int pos);void delete_val(SeqList*List, ElemType x);void sort(SeqList*List);void resver(SeqList *List);void clear(SeqList *List);void destroy(SeqList* List);#endif // !_SEQLIST_H_
SeqList.c
#include "SeqList.h"void InitSeqList(SeqList *list){list->base = (ElemType *)malloc(sizeof(ElemType)*SEQLIST_INIT_SIZE);assert(list->base != NULL);list->capacity = SEQLIST_INIT_SIZE;list->size = 0;}void push_back(SeqList *List, ElemType x){if (List->size>=List->capacity){printf_s("顺序表空间已满,不能插入数据\n");return;}List->base[List->size] = x;List->size++;}void push_front(SeqList *List, ElemType x){if (List->size>=List->capacity){printf_s("顺序表空间已满,不能插入数据\n");return;}for (int i = List->size; i >=0;i--){List->base[i] = List->base[i-1];}List->base[0] = x;List->size++;}void show_list(SeqList*List ){for (int i = 0; i < List->size;i++){printf_s("%d ", List->base[i]);}printf_s("\n");}void pop_back(SeqList * List){if (List->size ==0){printf_s("顺序表为空,不能删除数据\n");return;}List->size--;}void pop_front(SeqList *List){if (List->size == 0){printf_s("顺序表为空,不能删除数据\n");return;}for (int i = 0; i < List->size-1;i++){List->base[i] = List->base[i + 1];}List->size--;}void insert_pos(SeqList* List, int pos, ElemType x){if (pos<0||pos>List->size){printf_s("插入数据的位置非法,不能插入数据\n");return;}for (int i = List->size; i > pos;i--){ List->base[i] = List->base[i - 1];}List->base[pos] = x;List->size++;}int find(SeqList *List, ElemType key){for (int i= 0; i < List->size;i++){if (List->base[i]==key){return i;}}return -1;}int length(SeqList *List){return List->size;}void delete_pos(SeqList*List, int pos){if (pos<0||pos>=List->size){printf_s("删除数据的位置非法,不能删除");}for (int i = pos; i < List->size - 1;i++){List->base[i] = List->base[i + 1];}List->size--;}void delete_val(SeqList*List, ElemType x){int pos = find(List, x);if (pos=-1){printf_s("表中没有该数据");}delete_pos(List, pos);}void sort(SeqList*List){for (int i= 0; i<List->size - 1;i++){for (int j = 0; j < List->size - 1 - i; j++){if (List->base[j]>List->base[j+1]){ElemType tmp = List->base[j];List->base[j] = List->base[j + 1];List->base[j + 1] = tmp;}}}}void resver(SeqList *List){if (List->size == 0 || List->size == 1){return;}int low = 0;int high = List->size - 1;ElemType tmp;while (low<high){tmp = List->base[high];List->base[high] = List->base[low];List->base[low] = tmp;high--;low++;}}void clear(SeqList *List){List->size = 0;}void destroy(SeqList* List){free(List->base);List->base = NULL;List->capacity = 0;List->size = 0;}
#include "SeqList.h"#include <iostream>int main(){SeqList mylist;InitSeqList(&mylist);ElemType Item;int pos;int select = 1;while (select){printf_s("**************************************\n");printf_s("* [1] push_back [2] push_fornt *\n");printf_s("* [3] show_list [4] pop_back *\n");printf_s("* [5] pop_fornt [6] insert_pos *\n");printf_s("* [7] find [8] lenght *\n");printf_s("* [9] delete_pos [10]pop_back *\n");printf_s("* [11] sort [12] resver *\n");printf_s("* [13] clear [14]destroy *\n");printf_s("* [14] quit_system *\n");printf_s("**************************************\n");printf_s("请选择:>");scanf_s("%d", &select);if (select==0){break;}switch (select){case 1:printf_s("请输入要插入的数据(-1结束):>");while (scanf_s("%d", &Item),Item!=-1){push_back(&mylist, Item);}break;case 2:printf_s("请输入要插入的数据(-1结束):>");while (scanf_s("%d", &Item), Item != -1){push_front(&mylist, Item);}break;case 3:show_list(&mylist);break;case 4:pop_back(&mylist);break;case 5:pop_front(&mylist);break;case 6:printf_s("请输入要插入的数据:>");scanf_s("%d", &Item);printf_s("请输入要插入的位置:>");scanf_s("%d", &pos);insert_pos(&mylist, pos, Item);break;case 7:printf_s("请输入要查找的数据:>");scanf_s("%d", &Item);pos = find(&mylist, Item);if (pos==-1){printf_s("未查到该数据:%d\n",Item);}else{printf_s("查找的数据在表中下标为 %d\n", pos);}break;default:printf_s("输入的选择错误,请重新输入\n");break;case 8:printf_s("顺序表的长度为:>%d\n", length(&mylist));break;case 9:printf_s("请输入要删除数据的位置:>");scanf_s("%d", &pos);delete_pos(&mylist,pos);break;case 10:printf_s("请输入要删除的数据:>");scanf_s("%d", &Item);delete_val(&mylist, Item);break;case 11:sort(&mylist);break;case 12:resver(&mylist);break;case 13:clear(&mylist);break;case 14:destroy(&mylist);break;}}system("pause");return 0;}
1 0
- 数据结构 - 线性表之顺序表 (c 语言)
- 数据结构之---c语言实现线性表的顺序表
- 数据结构c语言实现之顺序线性表
- C语言数据结构-1.线性表之顺序存储结构
- c语言数据结构线性表之顺序表功能函数
- 数据结构--线性表.顺序表(C语言实现)
- 数据结构(c语言)线性表-顺序表
- 数据结构(C语言)线性表 顺序存储
- C数据结构-线性表之顺序表
- 老郭带你学数据结构(C语言系列)1-线性表之静态顺序表
- 老郭带你学数据结构(C语言系列)2-线性表之动态顺序表
- 数据结构与算法(C语言)之线性表(顺序存储结构)
- C语言线性表之顺序表
- 数据结构---线性顺序表操作(c++)
- C语言数据结构之线性表
- C语言数据结构之线性表
- C语言数据结构之线性表(续)
- C语言 数据结构 线性表的顺序表示
- 三星还原Note7燃损真相 并将强化安全措施
- 图解区块链:14张图看懂什么是“区块链技术”?
- 一起talk C栗子吧(第一百九十九回:C语言实例--DIY cp命令三)
- ncl之logo
- vc 删除文件保留目录
- 数据结构 - 线性表之顺序表 (c 语言)
- C#常用命令库(备用)
- 【video】PPTV聚力年后或将改名苏宁视频 聚力体育划归苏宁搬至南京
- CentOS故障排除详解(3): 网络环境
- 132. Palindrome Partitioning II
- Cocos2d-x 3.x 图形学渲染系列二十四
- php与mysql的增删改查
- 三星联合第三方机构认真排查获得Note7燃损原因并公之于众
- (转)智能投顾的大赢家,仍然会是传统机构