头文件:
#ifndef _SEQLIST_H #define _SEQLIST_H #include <stdio.h> #define INIT_SIZE 8 typedef 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; } else return 0; } // 判断顺序表是否空 int isempty(SeqList *list) { if (list->size == 0) { return -1; } else return 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; }
显示:
尾插:
头插:
排序:
头删:
尾删:
定位插入:
按值插入:
按位删除:
查找:
按值删除:
求长度:
反转:
清除:
退出系统:
时间: 2024-10-13 17:32:57