最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)基于靜態(tài)數(shù)組的順序表

 更新時間:2020年05月25日 09:49:38   作者:get_it_started  
這篇文章主要介紹了C++實(shí)現(xiàn)基于靜態(tài)數(shù)組的順序表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(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//鏈表最多元素個數(shù)

typedef int seqType;
typedef struct seqlist
{
  seqType arr[maxsize];//數(shù)據(jù)域,存放數(shù)據(jù)
  size_t size;//size_t是無符號長整型,是一種類型,size在數(shù)組中表示元素個數(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("元素已滿,無法插入\n");
    return;
  }
  else
  seq->arr[seq->size++] = value;
}

void seqlistPopBack(seqlist *seq)//尾刪元素,value是插入元素的值
{
  assert(seq);//判斷指針是否為空
  if (seq->size ==0)
  {
    printf("內(nèi)容已為空,無法刪除\n");
    return;
  }
  else
    seq->size--;
}

void seqlistPushHead(seqlist *seq, seqType value)//頭插元素
{
  assert(seq);//判斷指針是否為空
  if (seq->size == maxsize)
  {
    printf("元素已滿,無法插入\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)容已為空,無法刪除\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("線性表為空\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)容為空,無法讀取內(nèi)容\n");
    return -1;
  }
  else if (pos> seq->size)
  {
    printf("讀取位置錯誤\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)容為空,無法修改內(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)容已滿,無法繼續(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("該位置無法刪除!\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("沒有找到該元素");
    return;
  }
}

在進(jìn)行插入、刪除等操作中,若對元素的位置移動不清楚的借助畫圖能更好地理解。

測試函數(shù)test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"seqlist.h"

void Test_PushBack()//測試順序表尾插元素
{
  print_seqlist("*****尾插3個元素至順序表*****");
  seqlist seq;
  seqlistInit(&seq);
  seqlistPushBack(&seq, 2);
  seqlistPushBack(&seq, 4);
  seqlistPushBack(&seq, 6);
  PrintSeqList(&seq);
}

void Test_PopBack()//測試順序表尾刪元素
{
  print_seqlist("*****尾刪順序表中的1個元素*****");
  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個元素*****");
  seqlist seq;
  seqlistInit(&seq);
  seqlistPushHead(&seq, 2);
  seqlistPushHead(&seq, 4);
  seqlistPushHead(&seq, 6);
  PrintSeqList(&seq);

}

void Test_PopHead()//頭刪元素
{
  print_seqlist("*****頭刪順序表中的1個元素*****");
  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()//測試查找指定元素的下標(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;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言深入分析浮點(diǎn)型數(shù)據(jù)存儲

    C語言深入分析浮點(diǎn)型數(shù)據(jù)存儲

    使用編程語言進(jìn)行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-08-08
  • C語言實(shí)現(xiàn)單位車輛調(diào)度管理

    C語言實(shí)現(xiàn)單位車輛調(diào)度管理

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)單位車輛調(diào)度管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解C語言整數(shù)和浮點(diǎn)數(shù)在內(nèi)存中的存儲

    詳解C語言整數(shù)和浮點(diǎn)數(shù)在內(nèi)存中的存儲

    這篇文章主要介紹了C語言整數(shù)和浮點(diǎn)數(shù)在內(nèi)存中是如何存儲的,文中有詳細(xì)的代碼示例供大家參考,對大家了解學(xué)習(xí)C語言整數(shù)和浮點(diǎn)數(shù)在內(nèi)存中的存儲有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • C語言實(shí)現(xiàn)簡單三子棋游戲

    C語言實(shí)現(xiàn)簡單三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C/C++合并兩個升序鏈表的方式

    C/C++合并兩個升序鏈表的方式

    這篇文章主要介紹了C/C++合并兩個升序鏈表的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++有符號和無符號之間的轉(zhuǎn)換問題

    C++有符號和無符號之間的轉(zhuǎn)換問題

    在開發(fā)中經(jīng)常會遇到有符號和無符號之間的轉(zhuǎn)換問題,如果不清楚問題根源,很難解決bug,今天小編通過本文給大家分享c++有符號無符號轉(zhuǎn)換問題,需要的朋友參考下
    2021-07-07
  • c++ typeid關(guān)鍵字的使用

    c++ typeid關(guān)鍵字的使用

    這篇文章主要介紹了c++ typeid關(guān)鍵字的使用,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2020-11-11
  • C++友元(Friend)用法實(shí)例簡介

    C++友元(Friend)用法實(shí)例簡介

    這篇文章主要介紹了C++友元(Friend)用法,對于C++的學(xué)習(xí)來說有很好的參考價值,需要的朋友可以參考下
    2014-08-08
  • C++共享智能指針shared_ptr的實(shí)現(xiàn)

    C++共享智能指針shared_ptr的實(shí)現(xiàn)

    在C++中沒有垃圾回收機(jī)制,必須自己釋放分配的內(nèi)存,否則就會造成內(nèi)存泄露,解決這個問題最有效的方法是使用智能指針,本文主要介紹了C++共享智能指針shared_ptr的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12
  • LintCode 堆化詳解及實(shí)例代碼

    LintCode 堆化詳解及實(shí)例代碼

    這篇文章主要介紹了LintCode 堆化詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論

抚州市| 齐齐哈尔市| 五莲县| 德昌县| 嘉祥县| 怀远县| 巨鹿县| 潮州市| 镇沅| 石门县| 治多县| 浪卡子县| 鱼台县| 鄢陵县| 晋宁县| 莱芜市| 铁岭县| 高密市| 交口县| 武义县| 承德县| 调兵山市| 二连浩特市| 荔波县| 且末县| 彭阳县| 肃北| 淳化县| 刚察县| 民勤县| 佛坪县| 仙居县| 沽源县| 永年县| 贡山| 永胜县| 韶山市| 上犹县| 清镇市| 行唐县| 新龙县|