⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqlist1.c

📁 线性表顺序存储类型的各项基本操作实现与说明。
💻 C
字号:
#define OK 1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR 0
#define OVERFLOW -2
#include<stdio.h>
typedef int Status;
typedef struct{
    int * elem;
    int length;
    int listsize;
}SqList;

Status InitList_Sq(SqList L){
   L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
   if(!L.elem)exit(OVERFLOW);
   L.length=0;
   L.listsize=LIST_INIT_SIZE;
   return OK;
}

Status ListInsert_Sq(SqList L,int i,int e){
int *p,*q,*newbase;
if(i<1||i>L.length+1) return ERROR;
if(L.length>=L.listsize){
  newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
  if(!newbase) exit(OVERFLOW);
  L.elem=newbase;
  L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
  *(p+1)=*p;
*q=e;
++L.length;
return OK;
}

Status GetElem(SqList L,int i,int*e){
  int *p;
  if((i<1)||(i>L.length)) return ERROR;
  p=&(L.elem[i-1]);
  *e= *p;
  return OK;
}

Status ListDelete_Sq(SqList L,int i,int *e){
  int *p,*q;
  if((i<1)||(i>L.length)) return ERROR;
  p=&(L.elem[i-1]);
  *e= *p;
  q=L.elem+L.length-1;
  for(++p;p<=q;++p) *(p-1)=*p;
  --L.length;
  return OK;
}

Status DestroyList_Sq(SqList L){
  if(!L.listsize) return OK;
  free(L.elem);
  L.length=0;
  return OK;
}

void main()
{
  SqList L;
  int a,b,c,d,m,n,e,i,u;
  a=InitList_Sq(L);
  printf("a=%d\n",a);
  for(i=1;i<=20;i++)
    L.elem[i-1]=i;
  for(i=0;i<=19;i++)
    printf("%d ",L.elem[i]);
  printf("\n");
  b=ListInsert_Sq(L,6,21);
  printf("b=%d\n",b);
  for(i=0;i<=20;i++)
    printf("%d ",L.elem[i]);
  printf("\n");
  c=GetElem(L,7,&m);
  printf("c=%d\n",c);
  printf("m=%d\n",m);
  d=ListDelete_Sq(L,4,&n);
  printf("d=%d\n",d);
  for(i=0;i<=19;i++)
    printf("%d ",L.elem[i]);
  printf("\n");
  printf("n=%d\n",n);
  e=DestroyList_Sq(L);
  printf("e=%d\n",e);
  L.elem=NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -