数据结构-顺序表基本操作的实现(含全部代码)【转】
數據結構-順序表基本操作的實現(含全部代碼)
版權聲明:轉載請注明出處,并附有原文鏈接。謝謝:) https://blog.csdn.net/lady_killer9/article/details/82695770
今天起開始編寫數據結構中的各種數據結構及其算法的實現。
主要依據嚴蔚敏版數據結構教材以及王道數據結構考研輔導書。
今天是線性表中的順序表的實現,主要實現函數如下,讀者有需要可以評論,我可以適當加幾個。
CreatList(SqList &L,int n) 參數:順序表L,順序表長度n 功能:創建長度為的順序表 時間復雜度:O(n)
InitList(SqList &L) 參數:順序表L 功能:初始化
InsertList(SqList &L,int i,ElemType e) 參數:順序表L,位置i,元素e 功能:位置i處插入元素e
ListDelete(SqList &L,int i) 參數:順序表L,位置i 功能:刪除位置i處元素
LocateElem(SqList L,ElemType e) 參數:順序表L,元素e 功能:返回第一個等于e的元素的位置
PrintList(SqList L) 參數:順序表L 功能:遍歷L,并輸出
代碼如下:
/*
Project: sequence_list(數據結構-順序表)
Date: 2018/09/12
Author: Frank Yu
CreatList(SqList &L,int n) 參數:順序表L,順序表長度n 功能:創建長度為的順序表 時間復雜度:O(n)
InitList(SqList &L) 參數:順序表L 功能:初始化 時間復雜度:O(1)
InsertList(SqList &L,int i,ElemType e) 參數:順序表L,位置i,元素e 功能:位置i處插入元素e 時間復雜度:O(n)
ListDelete(SqList &L,int i) 參數:順序表L,位置i 功能:刪除位置i處元素 時間復雜度:O(n)
LocateElem(SqList L,ElemType e) 參數:順序表L,元素e 功能:返回第一個等于e的元素的位置 時間復雜度:O(n)
PrintList(SqList L) 參數:順序表L 功能:遍歷L,并輸出
*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#define MaxSize 100
#define ElemType int
#define Status int
using namespace std;
//順序表數據結構
typedef struct
{
ElemType data[MaxSize];//順序表元素
int length; //順序表當前長度
}SqList;
//***************************基本操作函數*******************************//
//初始化順序表函數,構造一個空的順序表
Status InitList(SqList &L)
{
memset(L.data,0,sizeof(L));//初始化數據為0
L.length=0; //初始化長度為0
return 0;
}
//創建順序表函數 初始化前n個數據
bool CreatList(SqList &L,int n)
{
if(n<0||n>MaxSize)false;//n非法
for(int i=0;i<n;i++)
{
scanf("%d",&L.data[i]);
L.length++;
}
return true;
}
//插入函數 位置i插入數據 i及之后元素后移 1=<i<=length+1
bool InsertList(SqList &L,int i,ElemType e)
{
if(i<1||i>L.length+1) //判斷位置是否有效
{
printf("位置無效!!!
");
return false;
}
if(L.length>=MaxSize)//判斷存儲空間是否已滿
{
printf("當前存儲空間已滿!!!
");
return false;
}
for(int j=L.length;j>=i;j--)//位置i及之后元素后移
{
L.data[j]=L.data[j-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
//刪除函數 刪除位置i的元素 i之后的元素依次前移
bool ListDelete(SqList &L,int i)
{
if(i<1||i>L.length)
{
printf("位置無效!!!
");
return false;
}
for(int j=i;j<=L.length-1;j++)//位置i之后元素依次前移覆蓋
{
L.data[j-1]=L.data[j];
}
L.length--;
return true;
}
//查找函數 按位置從小到大查找第一個值等于e的元素 并返回位置
int LocateElem(SqList L,ElemType e)
{
for(int i=0;i<L.length;i++)//從低位置查找
{
if(L.data[i]==e)
return i+1;
}
return 0;
}
//********************************功能函數*****************************************//
//輸出功能函數 按位置從小到大輸出順序表所有元素
void PrintList(SqList L)
{
printf("當前順序表所有元素:");
for(int i=0;i<L.length;i++)
{
printf("%d ",L.data[i]);
}
printf("
");
}
//創建順序表函數
void Create(SqList &L)
{
int n;bool flag;
printf("請輸入要創建的順序表長度(>1):");
scanf("%d",&n);
printf("請輸入%d個數(空格隔開):",n);
flag=CreatList(L,n);
if(flag){
printf("創建成功!
");
PrintList(L);
}
else printf("輸入長度非法!
");
}
//插入功能函數 調用InsertList完成順序表元素插入 調用PrintList函數顯示插入成功后的結果
void Insert(SqList &L)
{
int place;ElemType e;bool flag;
printf("請輸入要插入的位置(從1開始)及元素:
");
scanf("%d%d",&place,&e);
flag=InsertList(L,place,e);
if(flag)
{
printf("插入成功!!!
");
PrintList(L);
}
}
//刪除功能函數 調用ListDelete函數完成順序表的刪除 調用PrintList函數顯示插入成功后的結果
void Delete(SqList &L)
{
int place;bool flag;
printf("請輸入要刪除的位置(從1開始):
");
scanf("%d",&place);
flag=ListDelete(L,place);
if(flag)
{
printf("刪除成功!!!
");
PrintList(L);
}
}
//查找功能函數 調用LocateElem查找元素
void Search(SqList L)
{
ElemType e;int flag;
printf("請輸入要查找的值:
");
scanf("%d",&e);
flag=LocateElem(L,e);
if(flag)
{
printf("該元素位置為:%d
",flag);
}
else
printf("未找到該元素!
");
}
//菜單
void menu()
{
printf("********1.創建 2.插入*********
");
printf("********3.刪除 4.查找*********
");
printf("********5.輸出 6.退出*********
");
}
int main()
{
SqList L;int choice;
InitList(L);
while(1)
{
menu();
printf("請輸入菜單序號:
");
scanf("%d",&choice);
if(6==choice) break;
switch(choice)
{
case 1:Create(L);break;
case 2:Insert(L);break;
case 3:Delete(L);break;
case 4:Search(L);break;
case 5:PrintList(L);break;
default:printf("輸入錯誤!!!
");
}
}
return 0;
}
結果截圖:
插入結果截圖
刪除結果截圖
查找結果截圖
輸出結果截圖
2018-09-18更新 添加創建函數 菜單有改動
更多數據結構與算法的實現:數據結構(嚴蔚敏版)與算法的實現(含全部代碼)
有問題請下方評論,轉載請注明出處,并附有原文鏈接,謝謝!如有侵權,請及時聯系。
總結
以上是生活随笔為你收集整理的数据结构-顺序表基本操作的实现(含全部代码)【转】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate3 r的SLF4J问题
- 下一篇: Apache Ivy