【数据结构】实现顺序表(c语言)

头文件:

#ifndef _SEQLIST_H#define _SEQLIST_H#include <stdio.h>#define INIT_SIZE 8typedef struct SeqList{int *base;size_t size;size_t capacity;}SeqList;// 要实现的函数void InitList(SeqList *list);int isfull(SeqList *list);int isempty(SeqList *list);void show_list(SeqList *list);void tail_insert(SeqList *list,int x);void head_insert(SeqList *list,int x);void sort(SeqList *list);void head_delete(SeqList *list);void tail_delete(SeqList *list);void pos_insert(SeqList *list,int x,int pos);void val_insert(SeqList *list, int x);void pos_delete(SeqList *list,int pos);int find(SeqList *list,int x);void val_delete(SeqList *list,int x);int length(SeqList *list);void reverse(SeqList *list);void clear(SeqList *list);void destroy(SeqList *list);void quit_system(SeqList *list,int* x);#endif

fun:

#include "SeqList.h"// 定义两个返回值接收判断函数的结果int fret = isfull;int eret = isempty;// 初始化顺序表void InitList(SeqList *list){list->size = 0;list->capacity = INIT_SIZE;list->base = (int*)malloc(sizeof(int)*list->capacity);}// 判断顺序表是否满int isfull(SeqList *list){if (list->size >= list->capacity){return -1;}elsereturn 0;}// 判断顺序表是否空int isempty(SeqList *list){if (list->size == 0){return -1;}elsereturn 0;}// 显示void show_list(SeqList *list){int i;if (list->size == 0){printf("the table is empty!\n");}for (i = 0; i < list->size; ++i){printf("%d ", list->base[i]);}printf("\n");}// 尾插void tail_insert(SeqList *list,int x){if (fret == -1){printf("the table is full,can not insert!\n");return;}list->base[list->size] = x;list->size++;}// 头插void head_insert(SeqList *list,int x){int i;if (fret == -1){printf("the table is full,can not insert!\n");return;}for (i = list->size; i > 0; –i){list->base[i] = list->base[i – 1];}list->base[0] = x;list->size++;}// 排序void sort(SeqList *list){int i;int j;int temp;for (i = 1; i < list->size; ++i){for (j = 0; j < list->size – i; ++j){if (list->base[j]>list->base[j + 1]){temp = list->base[j];list->base[j] = list->base[j + 1];list->base[j + 1] = temp;}}}}// 头删void head_delete(SeqList *list){int i;if (eret == -1){printf("the table is empty,can not delete!\n");return;}for (i = 0; i < list->size; ++i){list->base[i] = list->base[i + 1];}list->size–;}// 尾删void tail_delete(SeqList *list){if (eret == -1){printf("the table is empty,can not delete!\n");return;}list->size–;}// 按位插入void pos_insert(SeqList *list,int x,int pos){int i;if (fret == -1){printf("the table is full,can not insert!\n");return;}if (pos<0 || pos>list->size){printf("the position is illegal!\n");return;}else{for (i = list->size; i > pos; –i){list->base[i] = list->base[i – 1];}list->base[pos] = x;list->size++;}}// 按值插入void val_insert(SeqList *list,int x){if (fret == -1){printf("the table is full,can not insert!\n");return;}tail_insert(list,x);sort(list);}// 按位删除void pos_delete(SeqList *list,int pos){int i;if (eret == -1){printf("the table is empty,can not delete!\n");return;}if (pos<0 || pos>list->size){printf("the position is illegal!\n");return;}else{for (i = pos; i < list->size; ++i){list->base[i] = list->base[i + 1];}list->size–;}}// 查找int find(SeqList *list,int x){int i;for (i = 0; i < list->size; ++i){if (list->base[i] == x){return i;}}printf("the number is not exit!\n");return 0;}// 按值删除void val_delete(SeqList *list,int x){int ret = find(list, x);int i;if (eret == -1){printf("the table is empty,can not delete!\n");return;}if (ret == -1){printf("the number is not exist!\n");return;}else{for (i = ret; i <list->size; ++i){list->base[i] = list->base[i + 1];}list->size–;}}// 求长度int length(SeqList *list){return list->size;}// 反转void reverse(SeqList *list){int temp;int i = 0;int j = list->size – 1;if (eret == -1){printf("the table is empty,can not operate!\n");return;}while (i < j){temp = list->base[i];list->base[i] = list->base[j];list->base[j] = temp;++i;–j;}}// 清空void clear(SeqList *list){list->size = 0;}// 摧毁void destroy(SeqList *list){list->base = NULL;}// 退出系统void quit_system(SeqList *list,int *x){*x = 0;}

主函数:

// c实现顺序表#include "SeqList.h"int main(){SeqList mylist;InitList(&mylist);int input = 1;int insert = 0;int pos = 0;while (input){printf("*********************************************************************\n");printf("*[1] show_list[2] tail_insert*\n"); printf("*[3] head_insert[4] sort*\n"); printf("*[5] head_delete[6] tail_delete*\n"); printf("*[7] pos_insert[8] val_insert*\n"); printf("*[9] pos_delete[10] find*\n"); printf("*[11] val_delete[12] length*\n"); printf("*[13] reverse[14] clear*\n"); printf("*[15] destroy[16] quit_system*\n"); printf("*********************************************************************\n"); printf("please enter your choose:");scanf_s("%d", &input);switch (input){case 1:show_list(&mylist);break;case 2:printf("please enter the number want to insert:\n");while (scanf_s("%d", &insert),insert != -1){tail_insert(&mylist, insert);}break;case 3:printf("please enter the number want to insert:\n");while (scanf_s("%d", &insert), insert != -1){head_insert(&mylist, insert);}break;case 4:sort(&mylist);break;case 5:head_delete(&mylist);break;case 6:tail_delete(&mylist);break;case 7:printf("please enter the number want to insert:\n");scanf_s("%d", &insert);printf("please enter the position :\n");scanf_s("%d", &pos);pos_insert(&mylist, insert, pos);break;case 8:printf("please enter the number want to insert:\n");scanf_s("%d", &insert);val_insert(&mylist, insert);break;case 9:printf("please enter the position :\n");scanf_s("%d", &pos);pos_delete(&mylist, pos);break;case 10:printf("please enter the number want to find:\n");scanf_s("%d", &insert);printf("at the %d\n", find(&mylist, insert));break;case 11:printf("please enter the number want to delete:\n");scanf_s("%d", &insert);val_delete(&mylist, insert);break;case 12:printf("the table's length is %d\n", length(&mylist));break;case 13:reverse(&mylist);break;case 14:clear(&mylist);break;case 15:destroy(&mylist);break;case 16:quit_system(&mylist, &input);break;default:break;}}return 0;}显示:

人生就像是一场旅行,遇到的既有感人的,

【数据结构】实现顺序表(c语言)

相关文章:

你感兴趣的文章:

标签云: