数据结构之顺序表(二)
生活随笔
收集整理的這篇文章主要介紹了
数据结构之顺序表(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這是接著之前的剩下來的部分:
#include <stdlib.h> #include "SeqList.h" #include <stdio.h>SeqList *Create_List() {//創建一個順序表SeqList* s = (SeqList*)malloc(sizeof(SeqList)/sizeof(char));if (NULL == s){return NULL;}//初始化順序的成員//為順序表分配存儲空間s->list = (SeqData*)malloc(sizeof(SeqData)/sizeof(char) * INIT_SIZE);if (s->list == NULL){free(s); //創建存儲空間失敗,先釋放順序表結點return NULL;}s->max_len = INIT_SIZE; s->len = 0;return s; }void Destroy(SeqList *s) {if (NULL == s){return;}//先釋放存儲空間free (s->list);//釋放順序表free (s); }int AgainMalloc(SeqList* s) {if (NULL == s){return FALSE;}//新申請的空間的字節數int new_size = sizeof(SeqData)/sizeof(char) * (INIT_SIZE + INCRESS_SIZE);SeqData* tmp = (SeqData*)realloc(s->list, new_size);if (NULL == tmp){return FALSE;}s->list = tmp;s->max_len += INCRESS_SIZE;return TRUE; }int Insert_Last(SeqList* s, SeqData data) {if (NULL == s){return FALSE;}//檢測順序表是否存滿if (s->len == s->max_len){//擴展空間if (AgainMalloc(s) != TRUE){return FALSE;}}//插入數據s->list[s->len] = data;s->len++;return TRUE; }int Insert_Head(SeqList* s, SeqData data) {if (NULL == s){return FALSE;}//檢查順序表是否存滿if (s->len == s->max_len){if (AgainMalloc(s) != TRUE){return FALSE;}}//進行移位int i;for (i = s->len-1; i >= 0; i--){s->list[i+1] = s->list[i];}s->list[0] = data;s->len++;return TRUE; }int Insert_Pos(SeqList* s, int pos, SeqData data) {if (NULL == s || pos < 0 || pos >s->len){return FALSE;}//檢測順序表是否存滿if (s->len == s->max_len){if (AgainMalloc(s) != TRUE){return FALSE;}}//進行移位int i;for (i = s->len-1; i >= pos; i--){s->list[i+1] = s->list[i];}s->list[pos] = data;s->len++;return TRUE; }int GetData(SeqList* s, int pos, SeqData* x) {if (s == NULL || pos < 0 ||pos >= s->len || x == NULL){return FALSE;}*x = s->list[pos];return TRUE; }int FindData(SeqList* s, SeqData data, SeqData* x) {if (s == NULL || x == NULL){return FALSE;}int i;int flag = 0;for (i = 0; i < s->len; i++){if (s->list[i] == data){*x = i;flag = 1;break;}}if (flag == 0){return FALSE;}return TRUE; }int Delete_Pos(SeqList* s, int pos) {if (NULL == s || pos < 0|| pos >= s->len){return FALSE;}//移動元素int i;for (i = pos; i < s->len-1; i++){s->list[i] = s->list[i+1];}s->len--;return TRUE; }int Delete_Data(SeqList* s, SeqData data) {if (NULL == s){return FALSE;}int index = -1;if (FindData(s, data, &index) == FALSE){return FALSE;}return Delete_Pos(s, index); }int Reverse_List(SeqList* s) {if (NULL == s){return FALSE;}int min = 0;int max = s->len - 1;SeqData tmp;while (min < max){tmp = s->list[min];s->list[min++] = s->list[max];s->list[max--] = tmp;}return TRUE; }SeqList* Merge_List(SeqList* s1, SeqList *s2) {if (NULL == s1 || NULL == s2){return NULL;}SeqList* s3 = (SeqList*)malloc(sizeof(SeqList)/sizeof(char));if (NULL == s3){return NULL;}//為s3分配存儲空間int size = sizeof(SeqData)/sizeof(char)* (s1->len + s2->len);s3->list = (SeqData*)malloc(size);s3->len = s1->len + s2->len;s3->max_len = s3->len;int i = 0; //遍歷 s1int j = 0; //遍歷 s2int k = 0; //遍歷 s3while (i < s1->len && j < s2->len){if (s1->list[i] < s2->list[j]){s3->list[k++] = s1->list[i++];}else{s3->list[k++] = s2->list[j++];}}while (i < s1->len){s3->list[k++] = s1->list[i++];}return s3; }void Display(SeqList* s) {if (NULL == s){return ;}int i;int count = 0;for (i = 0; i < s->len; i++){if (0 == i % 4){printf ("\n");}printf ("%8d", s->list[i]);}printf ("\n");}總結
以上是生活随笔為你收集整理的数据结构之顺序表(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis 动态传入表名 注解_My
- 下一篇: 2018-10-28