日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构C语言实现顺序表——实现增删查改操作完整代码

發布時間:2024/5/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构C语言实现顺序表——实现增删查改操作完整代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h>typedef int SEQ;typedef struct SeqLisrt {SEQ* a;int size;int capaciti; }SL;//初始化 void Init(SL* ps) {ps->a = NULL;ps->size = 0;ps->capaciti = 0; }//銷毀 void Destory(SL* ps) {free(ps->a);ps->a = NULL;ps->size = 0;ps->capaciti = 0; }//打印 void Print(SL* ps) {int i = 0;for (i=0;i<ps->size;i++){printf("%d ",ps->a[i]);} }//開辟空間 void CheckCapacity(SL* ps) {if (ps->size == ps->capaciti){int newcapaciti = ps->capaciti == 0 ? 4 : ps->capaciti * 2;SEQ* tmp = (SEQ*)realloc(ps->a, newcapaciti * sizeof(SEQ)*2);if (tmp == NULL){printf("realloc fail\n");exit(-1);}else{ps->a = tmp;ps->capaciti = newcapaciti;}} }//尾插 void PushBack(SL* ps, SEQ x) {CheckCapacity(ps);assert(ps);ps->a[ps->size] = x;ps->size++; }//頭插 void PushFront(SL* ps, SEQ x) {CheckCapacity(ps);assert(ps);int end = ps->size - 1;while (end >= 0){ps->a[end+1] = ps->a[end];end--;}ps->a[0] = x;ps->size++; }//尾刪 void PopBack(SL* ps) {CheckCapacity(ps);assert(ps->size > 0);ps->size--; }//頭刪 void PopFront(SL* ps) {CheckCapacity(ps);assert(ps->size > 0);int start = 1;while (start < ps->size){ps->a[start - 1] = ps->a[start];start++;}ps->size--; }//任意位置插入 void Insert(SL* ps, int pos, SEQ x) {assert(pos <= ps->size);int end = ps->size - 1;while (end > +pos){ps->a[end + 1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++; }//任意位置刪除 void Erase(SL* ps, int pos) {assert(pos <= ps->size);int start = pos;while (start < ps->size - 1){ps->a[start] = ps->a[start + 1];start++;}ps->size--; }//修改 void At(SL* ps, int pos, SEQ x) {assert(pos <= ps->size);ps->a[pos] = x; }int Find(SL* ps, int pos) {assert(pos <= ps->size);int i = 0;for (i = 0; i < ps->size; i++){if (ps->a[i] == pos){return i;}}return -1; }void menu() {printf("********************************\n");printf("1.尾插數據 2.頭插數據\n");printf("3.尾刪數據 4.頭刪數據\n");printf("5.任意插入 6.任意刪除\n");printf("7.修改數據 8.查找數據\n");printf("9.打印數據 -1.退出\n");printf("********************************\n");printf("請輸入你操作的選項>:"); }int main() {int option = 0;int x = 0;int i = 0;int pos = 0;SL s;Init(&s); //使用順序表前先初始化while (option != -1){menu();scanf("%d", &option);switch (option){case 1:printf("請輸入你要尾插的數據,以-1結束\n");do{scanf("%d", &x);if (x != -1){PushBack(&s, x);}} while (x != -1);break;case 2:printf("請輸入你要頭插的數據,以-1結束\n");do{scanf("%d", &x);if (x != -1){PushFront(&s, x);}} while (x != -1);break;case 3:printf("請輸入你要尾刪的元素個數\n");scanf("%d", &x);for (i = 0; i < x; i++){PopBack(&s);}break;case 4:printf("請輸入你要頭刪的元素個數\n");scanf("%d", &x);for (i = 0; i < x; i++){PopFront(&s);}break;case 5:printf("請輸入要插入的位置以及插入的數據\n");scanf("%d%d", &pos, &x);Insert(&s, pos, x);break;case 6:printf("請輸入要刪除的位置\n");scanf("%d", &pos);Erase(&s, pos);break;case 7:printf("請輸入位置以及修改的數據\n");scanf("%d%d", &pos, &x);At(&s, pos, x);break;case 8:printf("請輸入需要查找的數據\n");scanf("%d", &x);int ret = Find(&s, x);if (ret != -1){printf("找到了下標為:>%d\n", ret);}elseprintf("找不到\n");break;case 9:Print(&s);printf("\n");break;default:break;}}Destory(&s);//使用完后銷毀return 0; }

總結

以上是生活随笔為你收集整理的数据结构C语言实现顺序表——实现增删查改操作完整代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。