顺序表
顺序表作为数据结构的入门知识应该熟练掌握
1.线性表是什么?
答;类比队伍,它就是一群人在站队。有头、有尾、中间的前面后面有唯一一个人,这也是它的逻辑结构。同时它的物理结构是一块连续的物理内存。支持随机访问每个元素,但它的存储分配只能预先进行,即静态分配。
2.线性表可以用来干什么?
答:最简单的哈希表,每个序号代表一个元素。
系列的操作如查找、插入、删除
#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
/*顺序表的结构体定义*/
typedef struct
{
int data[maxsize];
int length;
}Sqlist; //sqlist 是自己定义的一种数据类型
/*初始化顺序表*/
void initlist(Sqlist & L)
{
L.length =0;
}
/*遍历线性表*/
void traList (Sqlist L)
{
int i;
for(i=0;i!=L.length ;++i)
{
printf("%d ",L.data[i]);
}
printf("\n");
}
/*按元素值查找该元素的位置*/
int findElem(Sqlist L,int e)
{
int i;
for(i=0;i<L.length;++i)//数组下标从0到L.length-1,顺序表从1到L.length
if(e==L.data[i])
return i; //表中的位置为数组的序号加1
return -1;
}
/*插入元素*/
int insertElem(Sqlist & L,int p,int e)
{
int i;
if(p<0||p>L.length-1||L.length==maxsize)
return 0;
for(i=L.length -1;i>=p;--i) //从P开始的元素后移
L.data[i+1]=L.data[i];
L.data[p]=e;
++L.length;
return 1;
}
/*删除元素*/
int deleteElem(Sqlist &L,int p,int &e)
{
int i;
if(p<0||p>L.length-1||L.length ==0)
return 0;
e=L.data [p];
for(i=p;i<L.length -1;++i)
L.data [i]=L.data [i+1];
--L.length ;
return 1;
}
int main()
{
int i;
Sqlist L={{3,5,2,16,13,53,56,7},8};//定义顺序表时赋值
traList(L);
printf("查找元素13的位置\n");
i=findElem(L,13);
printf("该元素的位置%d\n",i);
printf("顺序表的第二个位置插入元素1\n");
insertElem( L,1,1);
traList(L);
printf("删除顺序表的的五个元素\n");
deleteElem(L,4,i);
traList (L);
system("pause");
return 0;
}