【資料結構】實現順序表(c語言)
標頭檔案:
#ifndef _SEQLIST_H
#define _SEQLIST_H
#include <stdio.h>
#define INIT_SIZE 8
typedef struct SeqList
{
int *base;
size_t size;
size_t capacity;
}SeqList;
// 要實現的函式
void InitList(SeqList *list);
int isfull(SeqList *list);
int isempty(SeqList *list);
void show_list(SeqList *list);
void tail_insert(SeqList *list,int x);
void head_insert(SeqList *list,int x);
void sort(SeqList *list);
void head_delete(SeqList *list);
void tail_delete(SeqList *list);
void pos_insert(SeqList *list,int x,int pos);
void val_insert(SeqList *list, int x);
void pos_delete(SeqList *list,int pos);
int find(SeqList *list,int x);
void val_delete(SeqList *list,int x);
int length(SeqList *list);
void reverse(SeqList *list);
void clear(SeqList *list);
void destroy(SeqList *list);
void quit_system(SeqList *list,int* x);
#endif
fun:
#include "SeqList.h"
// 定義兩個返回值接收判斷函式的結果
int fret = isfull;
int eret = isempty;
// 初始化順序表
void InitList(SeqList *list)
{
list->size = 0;
list->capacity = INIT_SIZE;
list->base = (int*)malloc(sizeof(int)*list->capacity);
}
// 判斷順序表是否滿
int isfull(SeqList *list)
{
if (list->size >= list->capacity)
{
return -1;
}
else
return 0;
}
// 判斷順序表是否空
int isempty(SeqList *list)
{
if (list->size == 0)
{
return -1;
}
else
return 0;
}
// 顯示
void show_list(SeqList *list)
{
int i;
if (list->size == 0)
{
printf("the table is empty!\n");
}
for (i = 0; i < list->size; ++i)
{
printf("%d ", list->base[i]);
}
printf("\n");
}
// 尾插
void tail_insert(SeqList *list,int x)
{
if (fret == -1)
{
printf("the table is full,can not insert!\n");
return;
}
list->base[list->size] = x;
list->size++;
}
// 頭插
void head_insert(SeqList *list,int x)
{
int i;
if (fret == -1)
{
printf("the table is full,can not insert!\n");
return;
}
for (i = list->size; i > 0; --i)
{
list->base[i] = list->base[i - 1];
}
list->base[0] = x;
list->size++;
}
// 排序
void sort(SeqList *list)
{
int i;
int j;
int temp;
for (i = 1; i < list->size; ++i)
{
for (j = 0; j < list->size - i; ++j)
{
if (list->base[j]>list->base[j + 1])
{
temp = list->base[j];
list->base[j] = list->base[j + 1];
list->base[j + 1] = temp;
}
}
}
}
// 頭刪
void head_delete(SeqList *list)
{
int i;
if (eret == -1)
{
printf("the table is empty,can not delete!\n");
return;
}
for (i = 0; i < list->size; ++i)
{
list->base[i] = list->base[i + 1];
}
list->size--;
}
// 尾刪
void tail_delete(SeqList *list)
{
if (eret == -1)
{
printf("the table is empty,can not delete!\n");
return;
}
list->size--;
}
// 按位插入
void pos_insert(SeqList *list,int x,int pos)
{
int i;
if (fret == -1)
{
printf("the table is full,can not insert!\n");
return;
}
if (pos<0 || pos>list->size)
{
printf("the position is illegal!\n");
return;
}
else
{
for (i = list->size; i > pos; --i)
{
list->base[i] = list->base[i - 1];
}
list->base[pos] = x;
list->size++;
}
}
// 按值插入
void val_insert(SeqList *list,int x)
{
if (fret == -1)
{
printf("the table is full,can not insert!\n");
return;
}
tail_insert(list,x);
sort(list);
}
// 按位刪除
void pos_delete(SeqList *list,int pos)
{
int i;
if (eret == -1)
{
printf("the table is empty,can not delete!\n");
return;
}
if (pos<0 || pos>list->size)
{
printf("the position is illegal!\n");
return;
}
else
{
for (i = pos; i < list->size; ++i)
{
list->base[i] = list->base[i + 1];
}
list->size--;
}
}
// 查詢
int find(SeqList *list,int x)
{
int i;
for (i = 0; i < list->size; ++i)
{
if (list->base[i] == x)
{
return i;
}
}
printf("the number is not exit!\n");
return 0;
}
// 按值刪除
void val_delete(SeqList *list,int x)
{
int ret = find(list, x);
int i;
if (eret == -1)
{
printf("the table is empty,can not delete!\n");
return;
}
if (ret == -1)
{
printf("the number is not exist!\n");
return;
}
else
{
for (i = ret; i <list->size; ++i)
{
list->base[i] = list->base[i + 1];
}
list->size--;
}
}
// 求長度
int length(SeqList *list)
{
return list->size;
}
// 反轉
void reverse(SeqList *list)
{
int temp;
int i = 0;
int j = list->size - 1;
if (eret == -1)
{
printf("the table is empty,can not operate!\n");
return;
}
while (i < j)
{
temp = list->base[i];
list->base[i] = list->base[j];
list->base[j] = temp;
++i;
--j;
}
}
// 清空
void clear(SeqList *list)
{
list->size = 0;
}
// 摧毀
void destroy(SeqList *list)
{
list->base = NULL;
}
// 退出系統
void quit_system(SeqList *list,int *x)
{
*x = 0;
}
主函式:
// c實現順序表
#include "SeqList.h"
int main()
{
SeqList mylist;
InitList(&mylist);
int input = 1;
int insert = 0;
int pos = 0;
while (input)
{
printf("*********************************************************************\n");
printf("* [1] show_list [2] tail_insert *\n");
printf("* [3] head_insert [4] sort *\n");
printf("* [5] head_delete [6] tail_delete *\n");
printf("* [7] pos_insert [8] val_insert *\n");
printf("* [9] pos_delete [10] find *\n");
printf("* [11] val_delete [12] length *\n");
printf("* [13] reverse [14] clear *\n");
printf("* [15] destroy [16] quit_system *\n");
printf("*********************************************************************\n");
printf("please enter your choose:");
scanf_s("%d", &input);
switch (input)
{
case 1:
show_list(&mylist);
break;
case 2:
printf("please enter the number want to insert:\n");
while (scanf_s("%d", &insert),insert != -1)
{
tail_insert(&mylist, insert);
}
break;
case 3:
printf("please enter the number want to insert:\n");
while (scanf_s("%d", &insert), insert != -1)
{
head_insert(&mylist, insert);
}
break;
case 4:
sort(&mylist);
break;
case 5:
head_delete(&mylist);
break;
case 6:
tail_delete(&mylist);
break;
case 7:
printf("please enter the number want to insert:\n");
scanf_s("%d", &insert);
printf("please enter the position :\n");
scanf_s("%d", &pos);
pos_insert(&mylist, insert, pos);
break;
case 8:
printf("please enter the number want to insert:\n");
scanf_s("%d", &insert);
val_insert(&mylist, insert);
break;
case 9:
printf("please enter the position :\n");
scanf_s("%d", &pos);
pos_delete(&mylist, pos);
break;
case 10:
printf("please enter the number want to find:\n");
scanf_s("%d", &insert);
printf("at the %d\n", find(&mylist, insert));
break;
case 11:
printf("please enter the number want to delete:\n");
scanf_s("%d", &insert);
val_delete(&mylist, insert);
break;
case 12:
printf("the table's length is %d\n", length(&mylist));
break;
case 13:
reverse(&mylist);
break;
case 14:
clear(&mylist);
break;
case 15:
destroy(&mylist);
break;
case 16:
quit_system(&mylist, &input);
break;
default:
break;
}
}
return 0;
}
顯示:
尾插:
頭插:
排序:
頭刪:
尾刪:
定位插入:
按值插入:
按位刪除:
查詢:
按值刪除:
求長度:
反轉:
清除:
退出系統:
相關文章
- 資料結構c語言實現順序表基本操作資料結構C語言
- C語言實現順序表C語言
- 資料結構 順序棧(c語言)資料結構C語言
- 【資料結構】實現順序表(c++)資料結構C++
- 線性表-順序表C語言實現C語言
- 資料結構_順序表_順序表的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- c語言資料結構,你可能還不知道的順序表C語言資料結構
- 順序表的基本方法實現C語言版C語言
- 【資料結構】順序棧的實現(c++)資料結構C++
- 資料結構:線性表的順序實現2.2資料結構
- 【資料結構】順序佇列的實現(c++)資料結構佇列C++
- C語言實現的資料結構之------雜湊表C語言資料結構
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 資料結構 - 線性表 - 順序表資料結構
- 具體實現程式碼@資料結構探險——順序表資料結構
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- 考研資料結構-線性表-順序表資料結構
- 資料結構雜湊表(c語言)資料結構C語言
- 基礎資料結構(一)---(最全)定長順序表的實現資料結構
- 資料結構——單連結串列介面實現(C語言)資料結構C語言
- 用c語言實現資料結構——單連結串列C語言資料結構
- 【資料結構】迴圈佇列 C語言實現資料結構佇列C語言
- 南郵資料結構實驗1.1 順序表的操作資料結構
- 資料結構練習題(順序表和單連結串列)C++資料結構C++
- c++模擬實現順序表C++
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 資料結構之---C語言實現快速排序(多個版本)資料結構C語言排序
- C#資料結構-二叉樹-順序儲存結構C#資料結構二叉樹
- 南郵資料結構實驗1.1:順序表的相關操作資料結構
- C++順序結構(3)、資料型別_____教學C++資料型別
- C 語言運算子優先順序
- C語言運算子優先順序C語言
- Java實現順序表Java
- 順序表的實現
- 資料結構之C語言模擬整數陣列實現資料結構C語言陣列
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- 【資料結構】用C語言實現單連結串列及其常見操作資料結構C語言
- python演算法與資料結構-順序表(37)Python演算法資料結構