#include<iostream>
using namespace std;
#define LIST_INIT_SIZE 100
#define LIST_INCREATMENT 10
const int OK=1;
const int ERROR=0;
typedef struct
{
char *elem;
int ListSize;
int length;
}SqList;
int List_Init_Sq(SqList &L)
{
L.elem=new char[LIST_INIT_SIZE];
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.ListSize=LIST_INIT_SIZE;
return OK;
}
int List_Display_Sq(SqList L)
{
for (int i = 0; i < L.length; i++)
{
cout<<L.elem[i]<<" ";
}
cout<<endl;
return OK;
}
int List_Insert_Sq(SqList &L)
{
int i;
char e;
cout<<"请输入要插入的元素及其位置:"<<endl;
cin>>e>>i;
if(i<0||i>L.length)
return ERROR;
char *newbase;
if(L.length >= L.ListSize)
{
newbase = (char *)realloc(L.elem,(L.ListSize+LIST_INCREATMENT)*sizeof(char));
if(!newbase)
return ERROR;
L.elem = newbase;
L.ListSize+=LIST_INCREATMENT;
}
char *p,*q;
p=&(L.elem[i-1]);
q=&(L.elem[L.length-1]);
while (q>=p)
{
*(q+1) = *q;
q--;
}
*p = e;
L.length++;
cout<<"在第"<<i<<"个位置插入元素"<<e<<"的结果为:"<<endl;
List_Display_Sq(L);
return OK;
}
int List_Delete_Sq(SqList &L)
{
int i;
char x;
cout<<"请输入要删除的元素的位置:"<<endl;
cin>>i;
if(i<0||i>L.length)
return ERROR;
char *p,*q;
p=&(L.elem[i-1]);
q=&(L.elem[L.length-1]);
x=*p;
while(p<q)
{
*p=*(p+1);
p++;
}
L.length--;
cout<<"删除第"<<i<<"个位置的元素"<<x<<"后的结果为:"<<endl;
List_Display_Sq(L);
return OK;
}
int List_LocateElem_Sq(SqList L)
{
char e;
cout<<"请输入要寻找的元素:"<<endl;
cin>>e;
int i = 0;
while (i<(L.length-1) && L.elem[i]!=e)
{
i++;
}
if(i==0)
cout<<"没找到."<<endl;
else
cout<<"元素"<<e<<"在位置"<<i+1<<"处"<<endl;
return OK;
}
int main()
{
SqList L;
int n;
cout<<"正在初始化。。。"<<endl;
List_Init_Sq(L);
cout<<"请输入线性表的长度:"<<endl;
cin>>n;
cout<<"请输入各个元素:"<<endl;
for(int i=0;i<n;i++)
{
cin>>L.elem[i];
L.length++;
}
cout<<"请选择操作:1、插入;2、删除;3、定位"<<endl;
int c;
cin>>c;
switch (c)
{
case 1:List_Insert_Sq(L);break;
case 2:List_Delete_Sq(L);break;
case 3:List_LocateElem_Sq(L);break;
default:
break;
}
system("pause");
return OK;
}
运行结果:
参考:http://blog.csdn.net/hackerain/article/details/5917952