您的位置:首页 > 理论基础 > 数据结构算法

【数据结构】线性表的顺序存储完整程序

2016-07-26 14:41 671 查看
数据结构,线性表的顺序存储完整程序

#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,n,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 i,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,int i)
{
int *p,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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 线性表