最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言順序表的實現(xiàn)代碼

 更新時間:2017年09月20日 17:25:25   作者:Tom文星  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)順序表的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)順序表的具體代碼,供大家參考,具體內(nèi)容如下

seqlist.h

#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#include<cstdio>
#include<malloc.h>
#include<assert.h>
#define SEQLIST_INIT_SIZE 8
#define INC_SIZE 3 //空間增量的大小
typedef int ElemType;
typedef struct Seqlist {
 ElemType *base;
 int capacity; //順序表容量
 int size; //表的大小
}Seqlist;

bool Inc(Seqlist *list);//增加順序表的容量
void InitSeqlist(Seqlist *list); //初始化順序表
void push_back(Seqlist *list, ElemType x); //在順序表的末尾插入元素
void push_front(Seqlist *list, ElemType x); //在順序表的頭部插入元素
void show_list(Seqlist *list); //顯示順序表中的元素
void pop_back(Seqlist *list); //刪除順序表最后一個元素
void pop_front(Seqlist *list); //刪除順序表第一個元素
void insert_pos(Seqlist *list, int pos, ElemType x);//在順序表的選定位置上插入數(shù)據(jù)
int find(Seqlist *list, ElemType key); //在順序表中查找元素key的下標
int length(Seqlist *list);//求順序表的長度
void delete_pos(Seqlist *list, int pos); //刪除順序表中特定位置的數(shù)據(jù)元素
void delete_val(Seqlist *list, int key);//刪除順序表中值為key的數(shù)據(jù)元素
void sort(Seqlist *list);//冒泡排序
void reverse(Seqlist *list);//逆置順序列表
void clear(Seqlist *list);//清除順序表中的所有元素
void destroy(Seqlist *list);//摧毀順序表
void merge(Seqlist *lt, Seqlist *la, Seqlist *lb);//合并兩個順序列表

#endif //__SEQLIST_H__ 

seqlist.cpp

#include"seqlist.h"

bool Inc(Seqlist *list) {
 ElemType *newbase = (ElemType*)realloc(list, sizeof(ElemType)*(list->capacity + INC_SIZE)); //重新分配內(nèi)存空間
 if (newbase == NULL) {
  printf("內(nèi)存空間已滿,無法再分配內(nèi)存空間!\n");
  return false;
 }
 list->base = newbase;
 list->capacity += INC_SIZE;
 return true;
}

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 && !Inc(list)) { //Inc(list)用來判斷增加順序表容量是否成功,只有在失敗的情況下才會進入if語句中
  printf("順序表容量已滿,無法再在表尾繼續(xù)插入新元素!\n");
  return;
 }
 list->base[list->size] = x;
 list->size++;
}

void push_front(Seqlist *list, ElemType x) {
 if (list->size >= list->capacity && !Inc(list)) {
  printf("順序表容量已滿,無法再在表頭插入新元素!\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("%d ", list->base[i]);
 }
 printf("\n");
}

void pop_back(Seqlist *list) {
 if (list->size == 0) {
  printf("順序表已空,無法再在表尾刪除元素!\n");
  return;
 }
 list->size--;
}

void pop_front(Seqlist *list) {
 if (list->size == 0) {
  printf("順序表已空,無法再在表頭刪除元素!\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("插入位置不合法,無法插入元素!\n");
  return;
 }
 if (list->size >= list->capacity && !Inc(list)) {
  printf("順序表容量已滿,無法在插入新的元素!\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("刪除位置不合法,無法刪除元素!\n");
  return;
 }
 for (int i = pos;i < list->size - 1;i++) {
  list->base[i] = list->base[i + 1];
 }
 list->size--;
}

void delete_val(Seqlist *list, int key) {
 int pos = find(list, key);
 if (pos == -1) {
  printf("順序表中沒有這個元素!\n");
  return;
 }
 delete_pos(list, pos);
}

void sort(Seqlist *list) {
 for (int i = 0;i < list->size - 1;i++) {//排序的趟數(shù)(例如5個數(shù)據(jù)需要比較4趟)
  for (int j = 0;j < list->size - 1 - i;j++) {//每一趟比較中的比較次數(shù)(例如5個數(shù)據(jù)在第0趟需要比較4次)
   if (list->base[j] > list->base[j + 1]) {
    ElemType temp = list->base[j];
    list->base[j] = list->base[j + 1];
    list->base[j + 1] = temp;
   }
  }
 }
}

void reverse(Seqlist *list) {
 if (list->size == 0 || list->size == 1) return;
 int low = 0, high = list->size - 1;
 while (low < high) {
  ElemType temp = list->base[low];
  list->base[low] = list->base[high];
  list->base[high] = temp;
  low++;
  high--;
 }
}

void clear(Seqlist *list) {
 list->size = 0;
}

void destroy(Seqlist *list) {
 free(list->base);
 list->base = NULL;
 list->capacity = 0;
 list->size = 0;
}

void merge(Seqlist *lt, Seqlist *la, Seqlist *lb) {
 lt->capacity = la->size + lb->size;
 lt->base = (ElemType*)malloc(sizeof(ElemType)*lt->capacity);
 assert(lt->base != NULL);

 int ia = 0, ib = 0, ic = 0;
 while (ia < la->size&&ib < lb->size) {
  if (la->base[ia] < lb->base[ib]) {
   lt->base[ic++] = la->base[ia++];
  }
  else {
   lt->base[ic++] = lb->base[ib++];
  }
 }
 while (ia < la->size) {
  lt->base[ic++] = la->base[ia++];
 }
 while (ib < lb->size) {
  lt->base[ic++] = lb->base[ib++];
 }
 lt->size = la->size + lb->size;
 show_list(lt);
}

main.cpp

#include"seqlist.h"

void main() {
 Seqlist list;
 InitSeqlist(&list);

 ElemType item;
 int pos;
 int select = 1;
 while (select) {
  printf("*******************************************\n");
  printf("*[1] push_back  [2] push_front *\n");
  printf("*[3] show_list  [4] pop_back  *\n");
  printf("*[5] pop_front  [6] insert_pos *\n");
  printf("*[7] find    [8] length  *\n");
  printf("*[9] delete_pos  [10] delete_value *\n");
  printf("*[11] sort    [12] reverse  *\n");
  printf("*[13] clear   [14] merge   *\n");
  printf("*[0] quit_system       *\n");
  printf("*******************************************\n");
  printf("請選擇:>>");
  scanf("%d", &select);
  if (select == 0) break;
  switch (select) {
  case 1:
   printf("請輸入要插入的數(shù)據(jù)(-1結(jié)束):>");
   while (scanf("%d", &item), item != -1) {//先輸入item的值,只要item不等于-1就接著循環(huán)
    push_back(&list, item);
   }
   break;
  case 2:
   printf("請輸入要插入的數(shù)據(jù)(-1結(jié)束):>");
   while (scanf("%d", &item), item != -1) {
    push_front(&list, item);
   }
   break;
  case 3:
   show_list(&list);
   break;
  case 4:
   pop_back(&list);
   break;
  case 5:
   pop_front(&list);
   break;
  case 6:
   printf("請輸入要插入的數(shù)據(jù):>");
   scanf("%d", &item);
   printf("請輸入要插入的位置:>");
   scanf("%d", &pos);
   insert_pos(&list, pos, item);
   break;
  case 7:
   printf("請輸入要查找的數(shù)據(jù):>");
   scanf("%d", &item);
   pos = find(&list, item);
   if (pos == -1)
    printf("查找的數(shù)據(jù)元素不在順序表中!\n");
   else
    printf("查找的數(shù)據(jù)元素在順序表中的下標位置為%d\n", pos);
   break;
  case 8:
   printf("順序表的長度為%d\n", length(&list));
   break;
  case 9:
   printf("請輸入要刪除數(shù)據(jù)在順序表中的下標位置:>");
   scanf("%d", &pos);
   delete_pos(&list, pos);
   break;
  case 10:
   printf("請輸入要刪除數(shù)據(jù)的值:>");
   scanf("%d", &item);
   delete_val(&list, item);
   break;
  case 11:
   sort(&list);
   break;
  case 12:
   reverse(&list);
   break;
  case 13:
   clear(&list);
   break;
  case 14:
   Seqlist mylist, yourlist;
   ElemType item1, item2;
   InitSeqlist(&mylist);
   InitSeqlist(&yourlist);
   printf("請輸入順序表1中的元素值(-1結(jié)束):>");
   while (scanf("%d", &item1), item1 != -1) {
    push_back(&mylist, item1);
   }
   printf("請輸入順序表2中的元素值(-1結(jié)束):>");
   while (scanf("%d", &item2), item2 != -1) {
    push_back(&yourlist, item2);
   }
   merge(&list, &mylist, &yourlist);
   destroy(&mylist);
   destroy(&yourlist);
   break;
  default:
   printf("輸入的選擇錯誤!請重新輸入!\n");
   break;
  }
 }
 destroy(&list);
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ OpenCV實戰(zhàn)之形狀識別

    C++ OpenCV實戰(zhàn)之形狀識別

    本案例通過使用OpenCV中的approxPolyDP進行多邊形近似,進而進行基礎(chǔ)形狀識別(圓、三角形、矩形、星形…),快跟隨小編一起動手嘗試一下
    2022-07-07
  • 詳解C++中遞增運算符重載的實現(xiàn)

    詳解C++中遞增運算符重載的實現(xiàn)

    本文主要詳解運算符重載里的遞增運算符重載;遞增和遞減原理是一樣的,這里就只分享遞增的重載;提到遞增遞減,我們都知道又前置和后置兩種方法, 那今天就詳解一下前置遞增和后置遞增的細節(jié),拿捏遞增運算符重載
    2022-06-06
  • 有關(guān)C++中類類型轉(zhuǎn)換操作符總結(jié)(必看篇)

    有關(guān)C++中類類型轉(zhuǎn)換操作符總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄嘘P(guān)C++中類類型轉(zhuǎn)換操作符總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言實現(xiàn)猜數(shù)字的小游戲

    C語言實現(xiàn)猜數(shù)字的小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)猜數(shù)字的小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Qt實現(xiàn)獲取文件大小與磁盤空間大小

    Qt實現(xiàn)獲取文件大小與磁盤空間大小

    這篇文章主要為大家詳細介紹了如何使用Qt實現(xiàn)獲取文件大小與磁盤空間大小,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習一下
    2023-11-11
  • VSCode配置C++環(huán)境的方法步驟(MSVC)

    VSCode配置C++環(huán)境的方法步驟(MSVC)

    這篇文章主要介紹了VSCode配置C++環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-05-05
  • Qt動態(tài)庫調(diào)用宿主進程中的對象方法純虛函數(shù)使用

    Qt動態(tài)庫調(diào)用宿主進程中的對象方法純虛函數(shù)使用

    這篇文章主要為大家介紹了Qt動態(tài)庫調(diào)用宿主進程中的對象方法純虛函數(shù)使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • C語言數(shù)據(jù)(整數(shù)、浮點數(shù))在內(nèi)存中的存儲

    C語言數(shù)據(jù)(整數(shù)、浮點數(shù))在內(nèi)存中的存儲

    之前對c語言數(shù)據(jù)存儲一直不太明白,最近仔細研究了一番,所以下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)據(jù)(整數(shù)、浮點數(shù))在內(nèi)存中存儲的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C語言小程序 數(shù)組操作示例代碼

    C語言小程序 數(shù)組操作示例代碼

    對數(shù)組進行操作,查找、插入、刪除
    2013-07-07
  • 利用C語言實現(xiàn)五子棋游戲

    利用C語言實現(xiàn)五子棋游戲

    這篇文章主要為大家詳細介紹了利用C語言實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

乾安县| 鲁山县| 图片| 六盘水市| 颍上县| 余庆县| 德州市| 淮南市| 平潭县| 临江市| 泽库县| 香河县| 东丽区| 荔波县| 兴国县| 喀喇沁旗| 定日县| 赤水市| 铜陵市| 丽江市| 治县。| 凉城县| 双流县| 南开区| 高州市| 德令哈市| 海阳市| 鲜城| 姜堰市| 南川市| 乌拉特前旗| 彰化市| 巴彦淖尔市| 米林县| 石台县| 昌宁县| 中宁县| 棋牌| 四平市| 崇仁县| 清涧县|