终于将顺序表的代码实现摞完了,通过编程加深了对于顺序表的理解,明天写关于链表的顺序实现。上代码
/*
* ss.c++
*
* Created on: 2016-4-9
* Author: Administrator
*/
# include <iostream>
# include <stdio.h>
# define MAXSIZE 100
# define OVERFLOW 0
typedef struct {
int *elem; //存儲空間基地址
int length; //當前長度
}SqList;
SqList L; //声明L为全局变量
int InistList_Sq(SqList &L){
//構造一個空的線性表L
L.elem=new int[MAXSIZE]; //為順序表分配一個大小為MAXSIZE的數組空間
if (!L.elem)exit(OVERFLOW); //存儲分配失敗
L.length=0; //空表長度為0
return 1;
}
void LocateElem_sq(){
//根据数据值查找元素
int i,e,zt=0;
printf("请输入查找的数值\n");
scanf("%d",&e);
for (i=0;i<L.length;i++){
if (L.elem[i]==e){
zt=1;
break;
}
}
if (zt==0)
printf("该数值不在顺序表当中");
else
printf("数值%d的位置是%d\n",e,i+1);
}
int ListInsert_sq(SqList &L,int i,int e){
//在顺序表第i个位置之前插入新的元素e
//i的合法范围为1-L.length+1
if ((i<1)||(i>L.length+1)) return 0;
if (L.length==MAXSIZE) return 0;
int j;
for (j=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];//插入位置之后的元素依次后移一位
}
L.elem[i-1]=e; //插入元素
++L.length;
return 1;
}
void ListDelete_Sq(){
//在顺序表中删除第i个元素,并用e返回其值
//i的合法范围是1-L.length
int i,j,zt=0;
printf("请输入你想删除的元素序号\n");
scanf("%d",&i);
if ((i<1)||(i>L.length)) {
printf ("您输入的序号有误\n");
zt=1;
}
if (zt==0)
{
for (j=i;j<=L.length;j++){
L.elem[j-1]=L.elem[j];
--L.length;
}
printf("删除成功\n");
}
}
void ListInsert1()
{
int i,e;
printf("请输入想插入线性表的位置和插入元素的数值\n");
scanf("%d %d",&i,&e);
int t=ListInsert_sq(L,i,e);
if (t==1)
printf("插入线性表成功!\n");
else
printf("插入线性表失败!");
}
void ThroughList()
{
int i;
for (i=0;i<L.length;i++){
printf("第%d个元素是%d\n",i+1,L.elem[i]);
}
}
int main ()
{
int j=InistList_Sq(L);//构造一个空的顺序表L
while (1){
int m;
printf("请选择操作:1.插入元素2.根据数值查找元素3.删除第i个元素4.遍历顺序表\n");
scanf ("%d",&m);
switch (m){
case 1:ListInsert1(); break;
case 2:LocateElem_sq(); break;
case 3:ListDelete_Sq();break;
case 4:ThroughList();break;
default :printf("输入有误!\n");
}
}
return 0;
}