【資料結構】實現順序表(c語言)

來源:互聯網
上載者:User

標籤:資料結構   順序表   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語言)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.