数据结构 - 线性表之顺序表 (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;}


main.c
#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;}


                                      VS  2013 编译  

1 0
原创粉丝点击