数据结构--顺序表的操作

#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;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值