C++實(shí)現(xiàn)基于靜態(tài)數(shù)組的順序表
本文實(shí)例為大家分享了C++實(shí)現(xiàn)基于靜態(tài)數(shù)組的順序表,供大家參考,具體內(nèi)容如下
實(shí)現(xiàn)的基本操作有:
1. 初始化
2. 尾插
3. 尾刪
4. 頭插
5. 頭刪
6.查找任意元素
7. 讀任意位置元素
8. 修改任意位置元素
9. 查找指定元素值的下標(biāo)
10. 在任意位置插入元素
11.刪除指定位置的元素
12.刪除任意元素
13.打印數(shù)據(jù)
頭文件seqlist.h:
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define maxsize 1000//鏈表最多元素個(gè)數(shù)
typedef int seqType;
typedef struct seqlist
{
seqType arr[maxsize];//數(shù)據(jù)域,存放數(shù)據(jù)
size_t size;//size_t是無(wú)符號(hào)長(zhǎng)整型,是一種類(lèi)型,size在數(shù)組中表示元素個(gè)數(shù)
}seqlist ;
void PrintSeqList(seqlist *seq); //打印數(shù)據(jù)
void print_seqlist(char *s); //打印標(biāo)題
void seqlistInit(seqlist *seq); //鏈表初始化
void seqlistPushBack(seqlist *seq, seqType value); //尾插元素,value是插入元素的值
void seqlistPopBack(seqlist *seq); //尾刪元素,value是插入元素的值
void seqlistPushHead(seqlist*seq, seqType value); //頭插元素
void seqlistPopHead(seqlist*seq); //頭刪元素
seqType seqlistFind(seqlist *seq, seqType data); //查找任意元素
seqType seqlistRead_pos(seqlist*seq, size_t pos); //讀取任意位置的元素
size_t seqlistFind_pos(seqlist*seq, seqType value); //查找指定元素的下標(biāo)
seqType seqlistModify(seqlist*seq, size_t pos, seqType data); //修改任意位置的元素
void seqlistInsert_pos(seqlist *seq, size_t pos, seqType data); //在任意位置插入元素
void seqlistErase_pos(seqlist *seq, size_t pos); //刪除任意位置的元素
void seqlistRemove(seqlist *seq, seqType data); //刪除元素
實(shí)現(xiàn)文件seqlist.c
#include"seqlist.h"
void PrintSeqList(seqlist *seq)//打印數(shù)據(jù)
{
size_t i = 0;
if (seq->size == 0)
{
printf("線性表為空,打印結(jié)束\n");
return;
}
for (i = 0; i < seq->size; i++)
{
printf("下標(biāo)為%d的元素是:%d\n",i, seq->arr[i]);
}
printf("\n");
}
void print_seqlist(char *s)//打印標(biāo)題
{
int i = 0;
printf("%s\n",s);
printf("\n");
}
void seqlistInit(seqlist *seq)//鏈表初始化
{
assert(seq);
seq->size = 0;//有效元素賦值為0;
}
void seqlistPushBack(seqlist *seq, seqType value)//尾插元素,value是插入元素的值
{
assert(seq);//判斷指針是否為空
if (seq->size == maxsize)
{
printf("元素已滿(mǎn),無(wú)法插入\n");
return;
}
else
seq->arr[seq->size++] = value;
}
void seqlistPopBack(seqlist *seq)//尾刪元素,value是插入元素的值
{
assert(seq);//判斷指針是否為空
if (seq->size ==0)
{
printf("內(nèi)容已為空,無(wú)法刪除\n");
return;
}
else
seq->size--;
}
void seqlistPushHead(seqlist *seq, seqType value)//頭插元素
{
assert(seq);//判斷指針是否為空
if (seq->size == maxsize)
{
printf("元素已滿(mǎn),無(wú)法插入\n");
return;
}
else
{
int i = seq->size - 1;
for (; i >= 0; i--)
{
seq->arr[i + 1] = seq->arr[i];
}
seq->arr[0]=value;
seq->size++;
}
}
void seqlistPopHead(seqlist *seq)//頭刪元素
{
assert(seq);//判斷指針是否為空
if (seq->size == 0)
{
printf("內(nèi)容已為空,無(wú)法刪除\n");
return;
}
else
{
size_t i =1;
for (; i < seq->size; i++)
{
seq->arr[i - 1] = seq->arr[i];
}
seq->size--;
}
}
seqType seqlistFind(seqlist *seq, seqType data)//查找任意元素
{
size_t i = 0;
assert(seq);//判斷指針是否為空
if (seq->size == 0)
{
printf("線性表為空\(chéng)n");
return -1;
}
for (i = 0; i < seq->size - 1; i++)
{
if (seq->arr[i] == data)
{
return seq->arr[i];
}
}
return -1;
}
seqType seqlistRead_pos(seqlist *seq, size_t pos)//讀取任意位置的元素
{
assert(seq);//判斷指針是否為空
if (seq->size == 0)
{
printf("內(nèi)容為空,無(wú)法讀取內(nèi)容\n");
return -1;
}
else if (pos> seq->size)
{
printf("讀取位置錯(cuò)誤\n");
}
else
return seq->arr[pos];
}
size_t seqlistFind_pos(seqlist *seq, seqType value)//查找指定元素的下標(biāo)
{
assert(seq);//判斷指針是否為空
size_t i= 0;
for (; i < seq->size; i++)
{
if (seq->arr[i] == value)
return i;
}
return -1;
}
seqType seqlistModify(seqlist *seq, size_t pos, seqType data)//修改任意位置元素
{
assert(seq);//判斷指針是否為空
if (seq->size == 0)
{
printf("內(nèi)容為空,無(wú)法修改內(nèi)容\n");
return -1;
}
for (; pos < seq->size; pos++)
{
seq->arr[pos] = data;
return seq->arr[pos];
}
}
void seqlistInsert_pos(seqlist *seq, size_t pos, seqType data)//在任意位置插入元素
{
assert(seq);
if (seq->size == maxsize)
{
printf("內(nèi)容已滿(mǎn),無(wú)法繼續(xù)插入內(nèi)容\n");
return;
}
else if (pos>seq->size)
{
printf("非法位置,不允許插入\n");
return;
}
else
{
size_t m= seq->size ;
for (m = seq->size; m > pos; m--)
{
seq->arr[m] = seq->arr[m-1];
}
seq->arr[pos] = data;
seq->size++;
}
}
void seqlistErase_pos(seqlist *seq, size_t pos)//刪除任意位置的元素
{
assert(seq);
if (seq == NULL)
{
printf("內(nèi)容已為空!\n");
return;
}
else if (pos > seq->size)
{
printf("該位置無(wú)法刪除!\n");
return;
}
else
{
size_t i ;
for (i = pos; i < seq->size-1; i++)
{
seq->arr[i] = seq->arr[i+1];
}seq->size--;
}
}
void seqlistRemove(seqlist *seq, seqType data)//刪除元素
{
assert(seq);//判斷指針是否為空
size_t i = 0;
i = seqlistFind_pos(seq,data);
if (i >= 0)
{
while (i <seq->size)
{
seq->arr[i] = seq->arr[i + 1];
i++;
}
seq->size--;
return;
}
else
{
printf("沒(méi)有找到該元素");
return;
}
}
在進(jìn)行插入、刪除等操作中,若對(duì)元素的位置移動(dòng)不清楚的借助畫(huà)圖能更好地理解。
測(cè)試函數(shù)test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"seqlist.h"
void Test_PushBack()//測(cè)試順序表尾插元素
{
print_seqlist("*****尾插3個(gè)元素至順序表*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 6);
PrintSeqList(&seq);
}
void Test_PopBack()//測(cè)試順序表尾刪元素
{
print_seqlist("*****尾刪順序表中的1個(gè)元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 6);
PrintSeqList(&seq);
seqlistPopBack(&seq);
PrintSeqList(&seq);
}
void Test_PushHead()//頭插元素
{
print_seqlist("*****頭插順序表中的3個(gè)元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushHead(&seq, 2);
seqlistPushHead(&seq, 4);
seqlistPushHead(&seq, 6);
PrintSeqList(&seq);
}
void Test_PopHead()//頭刪元素
{
print_seqlist("*****頭刪順序表中的1個(gè)元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushHead(&seq, 2);
seqlistPushHead(&seq, 4);
seqlistPushHead(&seq, 6);
PrintSeqList(&seq);
seqlistPopHead(&seq);
PrintSeqList(&seq);
}
void Test_Find()//查找任意元素
{
print_seqlist("*****查找順序表中的任意元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 6);
PrintSeqList(&seq);
int temp = 0;
temp = seqlistFind(&seq,2);
printf("查找到的元素是%d\n", temp);
printf("\n");
}
void Test_Read_pos()//讀取任意位置元素
{
print_seqlist("*****查找順序表中的任意位置的元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 6);
PrintSeqList(&seq);
int temp = 0;
temp=seqlistRead_pos(&seq, 1);
printf("下標(biāo)為1的元素是%d\n", temp);
printf("下標(biāo)為4的元素是:");
seqlistRead_pos(&seq, 4);
printf("\n");
}
void Test_seqlistFind_pos()//測(cè)試查找指定元素的下標(biāo)
{
print_seqlist("*****查找順序表中指定元素的下標(biāo)*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 6);
seqlistPushBack(&seq, 7);
PrintSeqList(&seq);
size_t pos = seqlistFind_pos(&seq, 4);
size_t pos1 = seqlistFind_pos(&seq, 9);
printf("元素4的下標(biāo)為:%d\n", pos);
printf("元素9的下標(biāo)為:%d,元素不存在\n", pos1);
printf("\n");
}
void Test_seqlistModify()//修改任意位置元素
{
print_seqlist("*****修改順序表中任意元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 6);
seqlistPushBack(&seq, 7);
PrintSeqList(&seq);
int temp = seqlistModify(&seq, 1, 3);
int temp1 = seqlistModify(&seq, 2, 8);
PrintSeqList(&seq);
printf("修改下標(biāo)為1的元素為:%d\n", temp);
printf("修改下標(biāo)為2的元素為:%d\n", temp1);
}
void Test_seqlistInsert()//在任意位置插入元素
{
print_seqlist("*****在順序表中任意位置插入元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 5);
seqlistPushBack(&seq, 6);
PrintSeqList(&seq);
seqlistInsert_pos(&seq, 2, 3);
PrintSeqList(&seq);
seqlistInsert_pos(&seq, 8, 9);
}
void Test_seqlistErase_pos()//刪除任意位置元素
{
print_seqlist("*****在順序表中刪除任意位置元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 5);
seqlistPushBack(&seq, 6);
PrintSeqList(&seq);
seqlistErase_pos(&seq, 1);
seqlistErase_pos(&seq, 4);
PrintSeqList(&seq);
}
void Test_Remove()//刪除任意元素
{
print_seqlist("*****在順序表中刪除任意元素*****");
seqlist seq;
seqlistInit(&seq);
seqlistPushBack(&seq, 2);
seqlistPushBack(&seq, 4);
seqlistPushBack(&seq, 5);
seqlistPushBack(&seq, 6);
PrintSeqList(&seq);
seqlistRemove(&seq, 4);
PrintSeqList(&seq);
}
int main()
{
Test_PushBack();
Test_PopBack();
Test_PushHead();
Test_PopHead();
Test_Find();
Test_Read_pos();
Test_seqlistFind_pos();
Test_seqlistModify();
Test_seqlistInsert();
Test_seqlistErase_pos();
Test_Remove();
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++編程中使用設(shè)計(jì)模式中的policy策略模式的實(shí)例講解
這篇文章主要介紹了C++編程中使用設(shè)計(jì)模式中的policy策略模式的實(shí)例講解,文章最后對(duì)策略模式的優(yōu)缺點(diǎn)有一個(gè)簡(jiǎn)單的總結(jié),需要的朋友可以參考下2016-03-03
C語(yǔ)言結(jié)構(gòu)體(struct)的詳細(xì)講解
C語(yǔ)言中,結(jié)構(gòu)體類(lèi)型屬于一種構(gòu)造類(lèi)型(其他的構(gòu)造類(lèi)型還有:數(shù)組類(lèi)型,聯(lián)合類(lèi)型),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
C語(yǔ)言中正切的相關(guān)函數(shù)總結(jié)
這篇文章主要介紹了C語(yǔ)言中正切的相關(guān)函數(shù)總結(jié),包括正切和反正切以及雙曲線正切等的函數(shù),需要的朋友可以參考下2015-08-08
C++的try塊與異常處理及調(diào)試技術(shù)實(shí)例解析
這篇文章主要介紹了C++的try塊與異常處理及調(diào)試技術(shù)實(shí)例解析,有助于讀者加深對(duì)try塊調(diào)試技術(shù)的認(rèn)識(shí),需要的朋友可以參考下2014-07-07
C++中的std::funture和std::promise實(shí)例詳解
在線程池中獲取線程執(zhí)行函數(shù)的返回值時(shí),通常使用 std::future 而不是 std::promise 來(lái)傳遞返回值,這篇文章主要介紹了C++中的std::funture和std::promise實(shí)例詳解,需要的朋友可以參考下2024-05-05
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
C語(yǔ)言求階乘之和的三種實(shí)現(xiàn)方法(先階乘再累加)
對(duì)于C/C++初學(xué)者來(lái)說(shuō),可能會(huì)經(jīng)常遇到如計(jì)算階乘等問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言求階乘之和的三種實(shí)現(xiàn)方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
C++類(lèi)與對(duì)象及構(gòu)造函數(shù)析構(gòu)函數(shù)基礎(chǔ)詳解
這篇文章主要為大家介紹了C++類(lèi)與對(duì)象及構(gòu)造函數(shù)析構(gòu)函數(shù)基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

