#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREACEMENT 10
#define OK 1
#define OVERFLOW 1
typedef int ElemType;
typedef struct {
ElemType *elem;//存儲空間首位址
int length;//目前長度
int listsize;//目前可配置設定的存儲容量
}Sqlist;
int InitList(Sqlist &L);
int ListInsert(Sqlist &L,int i,ElemType e);
int ListDelete(Sqlist &L,int i);
void main()
{
Sqlist L;
ElemType e,z;
int n,i=0,j=0;
int x,y,w;
if(InitList(L))
{
printf(" 初始化順序表成功 /n");
}
printf("請輸入順序表的長度n:/n");
scanf("%d",&n);
printf("請輸入n個數:/n");
for(;i<n;i++)
{
scanf("%d",&(L.elem[i]));
++L.length;
}
for(;j<n;j++)
{
if(j%5==0){
printf("/n");
printf("%d ",L.elem[j]);
}
else{
printf("%d ",L.elem[j]);
}
}
printf("/n");
printf("請輸入要查詢表中具體的值:");
scanf("%d",&e);
for(z=1;z<L.length;z++)
{
if(L.elem[z]==e)
printf("該值的具體位序:%d/n",z);
}
printf("/n");
printf("請輸入你要插入的位置和值:");
scanf("%d%d",&x,&y);
ListInsert(L,x,y);
for(int k=0;k<L.length;k++)
{
printf("%d ",L.elem[k]);
}
printf("/n");
do{
printf("請輸入你要删除的位序:/n");
scanf("%d",&w);
ListDelete(L,w);//删除表中具體的值。
if(w>0)
{
for(int v=0;v<L.length;v++)
{
printf("%d ",L.elem[v]);
}
}
}while(w>0);
printf(" 将順序表逆序: /n");
for(int g=0;g<L.length/2;g++)//将順序表逆序。
{
int m;
m=L.elem[g];
L.elem[g]=L.elem[L.length-1-g];
L.elem[L.length-1-g]=m;
}
for(int v=0;v<L.length;v++)
{
printf("%d ",L.elem[v]);
}
}
//構造一個空的順序表
int InitList(Sqlist &L)
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));//動态存儲配置設定,将配置設定記憶體的首位址指派順序表的首位址。
if (!L.elem)exit(OVERFLOW);//存儲配置設定失敗;
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
int ListInsert(Sqlist &L,int i,ElemType e)
{int *p,*q,*newbase;
if (i<1||i>L.length)return ERROR;//判斷i得知是否合法;
if (L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREACEMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREACEMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;//插入位置向右移
*q=e;//插入e;
++L.length;
return OK;
}
int ListDelete(Sqlist &L,int i)
{
int *p,*q;
if(i<1||i>L.length)return ERROR;
p=&L.elem[i-1];//p為被删除的位置;
q=&(L.elem[L.length-1]);
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
--L.length;
return OK;
}