数据结构,线性表的顺序存储完整程序
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<iostream.h>
#define LIST_INIT_SIZE 100
#define LISTNCREMENT 10
typedef struct {
int *elem;
int length;
int listsize;
}sqlist;
sqlist InitSList();
void DeleteSList(sqlist &L,int i);
void InsertSList(sqlist &L,int i,int e);
void FindList(sqlist L,int i);
void InverseList(sqlist L);
void Print(sqlist L);
void main()
{
int i;
sqlist L;
L=InitSList();
L.length=5;
for(i=0;i<L.length;i++)
L.elem[i]=i;
printf("original list:\n");
Print(L);
// printf("请输入表长: \n");
// scanf("%d",&L.length);
// printf("表中的元素是:\n");
// for(i=0;i<L.length;i++)
// scanf("%d",&L.elem[i]);
cout<<"~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<"请选择:\n";
cout<<"1.插入元素:\n";
cout<<"2.删除元素:\n";
cout<<"3.查找元素:\n";
cout<<"4.顺序表逆置:\n";
int c,n,e;
cin>>c;
switch(c)
{
case 1:
cout<<"请输入插入元素的位置n:\n";
cin>>n;
cout<<"请输入插入的元素n:\n";
cin>>e;
InsertSList( L,e);
Print(L);
break;
case 2:
cout<<"请输入删除元素的位置n:\n";
cin>>n;
DeleteSList(L,n);
Print(L);
break;
case 3:
cout<<"请输入查找元素的位置:\n";
cin>>n;
FindList(L,n);
break;
case 4:
InverseList(L);
break;
default:
printf("ERROR");
}
// DeleteSList(L,2);
// Print(L);
/// InsertSList( L,2,88);
// Print(L);
// FindList(L,4);
// InverseList(L);
}
/***********创建顺序表**********/
sqlist InitSList()
{
sqlist L;
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)
exit(0);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return L;
}
/***************删除元素************/
void DeleteSList(sqlist &L,int i)
{
int *p,*q;
if((i<1)||(i>L.length))
printf("ERROR");
p=&(L.elem[i-1]);
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
L.length--;
}
/**************插入元素*************************/
void InsertSList(sqlist &L,int e)
{
int *newbase;
int *q,*p;
if(i<1||i>L.length+1)
printf("ERROR");
if(L.length>=L.listsize)
{
newbase=(int *)realloc(L.elem,(L.listsize+LISTNCREMENT)*sizeof(int));
if(!newbase)
exit(0);
L.elem=newbase;
L.listsize+=LISTNCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);q<=p;p--)
{
*(p+1)=*p;
}
*q=e;
L.length++;
}
/*************查找元素********************/
void FindList(sqlist L,e;
// printf("请输入查找元素的位置:\n");
// scanf("%d",&i);
p=&(L.elem[i-1]);
e=*p;
printf("请输出该位置的元素:\n");
printf("%d",e);
printf("\n");
}
/*********************顺序表逆置******************************/
void InverseList(sqlist L)
{
int s,i;
for(i=0;i<L.length/2;i++)
{
s=L.elem[i];
L.elem[i]=L.elem[L.length-i-1];
L.elem[L.length-i-1]=s;
}
cout<<endl;
printf("新的顺序表中的元素是:\n");
for(i=0;i<L.length;i++)
{ printf("%d",L.elem[i]);
printf(" ") ;// cout<<" ~ " ; //有问题,printf和cout混用
}
}
void Print(sqlist L)
{
for(int i=0;i<L.length;i++)
{
printf("%d",L.elem[i]);
printf(" ");
}
printf("\n");
}