順序表的動態申請空間版本
動態順序表仍需建立乙個結構體:
typedef int datatype; //定義datatype型別
typedef struct seqlist
seqlist, *pseqlist;
每次插入新元素時,都需判斷是否現有空間已滿,所以用checkcapacity()函式來檢測容量,所以初始化的函式和檢測容量的函式顯得尤為重要:
void initseqlist(pseqlist p) //初始化順序表
memset(p->pdata, 0, sizeof(datatype)*default_sz); //初始化為0
p->count = 0; //有效個數
p->capacity = default_sz; //容量
}void checkcapacity(pseqlist p) //檢測容量
p->pdata = ret;
p->capacity += inc_sz; //開闢成功增加容量
}}
該工程仍為三個檔案:
1、test.c用來測試
2、seqlist.h用來宣告各功能的函式和定義順序表的結構體
3、seqlist.c檔案用來實現seqlist.h檔案中宣告的函式
具體原始碼如下:
test.c:
#define _crt_secure_no_warnings 1
#include#include"seqlist.h"
void test()
break;
case 2:
popback(&list);
printf("尾刪成功!\n");
break;
case 3:
break;
case 4:
popfront(&list);
printf("頭刪成功!\n");
break;
case 5:
else
}break;
case 6:
break;
case 7:
break;
case 8:
show(&list);
break;
case 9:
sort(&list);
printf("排序成功!\n");
break;
case 10:
else
}break;
default:
printf("請正確選擇!\n");
break;
} } while (input);
}int main()
seqlist.h:
#ifndef __seqlist_h__
#define __seqlist_h__
#include#include#include#include#define default_sz 3
#define inc_sz 2
typedef int datatype;
typedef struct seqlist
seqlist, *pseqlist;
void menu(); //主介面
void initseqlist(pseqlist p); //初始化順序表
void checkcapacity(pseqlist p);//檢測容量
void pushback(pseqlist p, datatype d); //尾插
void popback(pseqlist p); //尾刪
void pushfront(pseqlist p, datatype d); //頭插
void popfront(pseqlist p); //頭刪
int find(pseqlist p, datatype d); //查詢(返回下標)
void remove(pseqlist p, datatype d); //刪除第乙個找到的元素
void removeall(pseqlist p, datatype d); //刪除所有找到的元素
void show(pseqlist p); //列印順序表
void sort(pseqlist p); //排序
int binaryseach(pseqlist p, datatype d); //二分查詢
void destroyseqlist(pseqlist p); //銷毀順序表
#endif //__seqlist_h__
seqlist.c:
#define _crt_secure_no_warnings 1
#include#include"seqlist.h"
void menu()
void initseqlist(pseqlist p)
memset(p->pdata, 0, sizeof(datatype)*default_sz); //初始化為0
p->count = 0; //有效個數
p->capacity = default_sz; //容量
}void checkcapacity(pseqlist p) //檢測容量
p->pdata = ret;
p->capacity += inc_sz; //開闢成功增加容量 }}
void pushback(pseqlist p, datatype d) //尾插
void popback(pseqlist p) //尾刪
p->count--; //直接將有效元素減一即可
}void pushfront(pseqlist p, datatype d) //頭插
p->pdata[0] = d;
p->count++;
}void popfront(pseqlist p) //頭刪
for (i = 0; i < p->count; i++)
p->count--;
}int find(pseqlist p, datatype d) //查詢(返回下標)
} return -1;
}void remove(pseqlist p, datatype d) //刪除第乙個找到的元素
for (int i = ret; i < p->count-1; i++)
p->count--;
printf("刪除成功!\n");
}void removeall(pseqlist p, datatype d) //刪除所有找到的元素
p->count--;
} }}void show(pseqlist p) //列印順序表
printf("\n");
}void sort(pseqlist p) //排序
} }}int binaryseach(pseqlist p, datatype d) //二分查詢
else if (p->pdata[mid] < d)
else
}return -1;
}void destroyseqlist(pseqlist p) //銷毀順序表
c 動態申請空間
使用new申請空間 特點 1 沒有名字,只能通過指標間接訪問它們。2 從堆中申請空間 分類 變數 語法 指標變數 new 型別名 delete 指標變數 舉例 int p p new int delete p 初始化 p 90 p new int 99 一維陣列 語法 指標變數 new 型別名 下標...
動態順序表
ifndef seqlist h define seqlist h define capacity 3 typedef struct seqlist typedef enum tag typedef struct findret void expendseqlist seqlist pseq 擴大容...
動態順序表
動態順序表 引用庫函式 include include 巨集定義 define list init size 4 define list add size 2 define overflow 2 typedef int elemtype elemtype元素型別 定義結構體 typedef stru...