網站首頁 編程語言 正文
首先聲明一個順序表的結構 (數組的第一個元素是0,但是順序表的第一個一般 從1(人為設定)開始)
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define OK 1 #define FALSE 0 typedef int Elemtype; typedef bool Status; typedef struct list { Elemtype *elem; int len; //數據個數 int listsize; //順序表長度 }List;
-
listsize
代表這個順序表的最大容量,可以隨時擴容 -
len
代表在你創建的這個順序表中有幾個有效的數據,總是小于等于listsize
一、初始化順序表屬性
void list_init(List *L) { L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//開辟空間 if(L->elem==NULL)//判斷空間是否開辟成功 { printf("malloc fail\n"); exit(0); } L->len=0; //初始化數據有效數據為0 L->listsize=MAXSIZE; //初始化數組長度為MAXSIZE }
二、順序表的插入
Status list_insert(List *L,int i,Elemtype data) { Elemtype *base,*insert,*p; if(i<1 || i>L->len+1 || L==NULL) { printf("位置輸入錯誤\n"); return FALSE; } if(L->len > L->listsize) { base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));//動態擴容 L->elem=base; L->listsize+=MAXSIZE;//更新順序表大小 } insert=&(L->elem[i-1]);//目標指針指向要插入的目標地址 //指向最后一個元素的地址 for(p=L->elem + L->len-1;p>=insert;p--) { *(p+1)=*p; } *insert=data; L->len++; return OK; }
三、刪除?
Status delete_list(List *L,int i) { ElemType *q,*delete_i; if(L==NULL||i<0||i>L->len) return FALSE; delete_i=&(L->elem[i-1]);//用指針指向要刪除位置的地址 q=L->elem + L->len-1; //q指針指向順序表最后一個位置的地址 首地址加上數組長度就是最后一個元素地址 for(delete_i=delete_i+1;delete_i<=q;++delete_i)//從刪除位置的地址的下一個元素開始,每個往前移動一位 { *(delete_i-1)=*delete_i; //前一個位置等于后一個 } L->len--; return OK; }
全部程序
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define OK 1 #define FALSE 0 typedef int Elemtype; typedef bool Status; typedef struct list { Elemtype *elem; int len; int listsize; }List; void list_init(List *L) { L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//開辟空間 if(L->elem==NULL)//判斷空間是否開辟成功 { printf("malloc fail\n"); exit(0); } L->len=0; //初始化數據有效數據為0 L->listsize=MAXSIZE; //初始化數組長度為MAXSIZE } Status list_insert(List *L,int i,Elemtype data) { Elemtype *base,*insert,*p; if(i<1 || i>L->len+1 || L==NULL) { printf("位置輸入錯誤\n"); return FALSE; } if(L->len > L->listsize) { base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype)); L->elem=base; L->listsize+=MAXSIZE; } insert=&(L->elem[i-1]);//目標指針指向要插入的目標地址 //指向最后一個元素的地址 for(p=L->elem + L->len-1;p>=insert;p--) { *(p+1)=*p; } *insert=data; L->len++; return OK; } Status list_delete(List *L,int i) { Elemtype *aim,*p; if(i<0 || i>L->len) { printf("位置輸入錯誤\n"); return FALSE; } aim=&(L->elem[i-1]);//目標指針指向要刪除的目標地址 p=(L->elem+L->len-1); //指向最后一個元素的地址 for(aim=aim+1;aim<=p;++aim) //目標地址滑動刪除 { *(aim-1)=*aim; } L->len--; return OK; } void show_list(List *L) { int i; for(i=0;i<L->len;i++) { printf("elem[%d]=%d\n",i+1,L->elem[i]); } printf("\n"); } int main() { int i; List L; list_init(&L); for(i=0;i<10;i++) { list_insert(&L,i+1,i+1); } printf("插入前的順序表\n"); show_list(&L); printf("插入后的順序表 在5位置插入99\n"); list_insert(&L,5,99); show_list(&L); printf("刪除后的順序表 把5位置刪除\n"); list_delete(&L,5); show_list(&L); return 0; }
運行結果如下
原文鏈接:https://blog.csdn.net/qq_34991245/article/details/82695372
相關推薦
- 2022-12-15 Apache中偽靜態Rewrite的使用方法和URL重寫規則表達式講解_Linux
- 2022-06-07 FreeRTOS實時操作系統臨界段保護場合示例_操作系統
- 2022-05-02 Python的os包與os.path模塊的用法詳情_python
- 2022-07-08 C#使用WebClient實現上傳下載_C#教程
- 2022-05-24 調用無文檔說明的?Web?API過程描述_相關技巧
- 2022-12-27 詳解PyQt5?事件處理機制_python
- 2022-06-08 并發編程CountdownLatch結合線程池實現
- 2022-05-15 C++11:lambda表達式詳細介紹
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支