順序表的動態申請空間版本

2021-07-27 07:46:03 字數 3886 閱讀 2302

順序表的動態申請空間版本

動態順序表仍需建立乙個結構體:

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...