一周复习数据结构基础系列:
线性表的顺序储存:
不复习不知道,在这里我用结构体list做函数参数竟然无法修改结构体成员内容(在我心里这应该算全局变量啊),必须用 list*和->,好吧,待我去看看书。
/*
title:线性表的顺序储存
description:
author: averyboy
time:2017.3.13
version:1.0
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<cctype>
#include<ctime>
#define INF 0x3f3f3f3f3
#define PI acos(-1.0)
using namespace std;
int maxx =1000;
struct list
{
int elem[1000];
int last;
}seqlist1,*seqlist2;//用数组表示顺序表,last表示表当前最后一个数据下标。
void init(int num)//建立顺序表
{
memset(seqlist1.elem,0,sizeof(seqlist1.elem));
seqlist1.last=num;
return;
}
int listlength(list s)//查询顺序表长度
{
return s.last+1;
}
void showlist(list s)//打印顺序表
{
for(int i=0;i<=listlength(s);i++)
{
printf("%d ",s.elem[i]);
}
printf("\n");
return ;
}
int getdata(list s,int n)//获取给出下标处的数据值
{
if(s.last!=-1&&s.last>=n)
return s.elem[n];
else
return -1;
}
int finddata(list s,int n )//根据值查找数据
{
int i=0;
while(i<=s.last&&s.elem[i]!=n)
{
i++;
}
return (i>s.last?-1:i);
}
void deletelist(list *s,int n)//删除给定位置值
{
for(int i=n;i<s->last;i++)
{
s->elem[i]=s->elem[i+1];
//cout<<"!!!!"<<endl;
}
s->last--;
return ;
}
void inslist(list *s,int n,int v)//在指定位置插入值
{
for(int i=s->last;i>n;i--)
{
s->elem[i+1]=s->elem[i];
// cout<<"???"<<endl;
}
s->elem[n]=v;
s->last++;
return ;
}
void clear(list s)//清空表
{
memset(s.elem,0,sizeof(s.elem));
return ;
}
int main()
{
init(10);
seqlist1.elem[5]=100;
showlist(seqlist1);
inslist(&seqlist1,8,4);
deletelist(&seqlist1,1);
cout<<getdata(seqlist1,4)<<endl;
cout<<finddata(seqlist1,4)<<endl;
showlist(seqlist1);
clear(seqlist1);
showlist(seqlist1);
return 0;
}