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

📄 sqlist.cpp

📁 顺序表的基本操作 用C语言实现 是数据结构的入门程序
💻 CPP
字号:
 #include<string.h>
 #include<ctype.h>
 #include<malloc.h> /* malloc()等 */
 #include<limits.h> /* INT_MAX等 */
 #include<stdio.h> /* EOF(=^Z或F6),NULL */
 #include<stdlib.h> /* atoi() */
 #include<io.h> /* eof() */
 #include<math.h> /* floor(),ceil(),abs() */
 #include<process.h> /* exit() */
 /* 函数结果状态代码 */

 /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
 typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
 typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */


 
 Status InitList(SqList *L) /* 算法2.3 */
 { /* 操作结果:构造一个空的顺序线性表 */
   (*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
   if(!(*L).elem)
     exit(OVERFLOW); /* 存储分配失败 */
   (*L).length=0; /* 空表长度为0 */
   (*L).listsize=LIST_INIT_SIZE; /* 初始存储容量 */
   return OK;
 }


 Status CreatList(SqList*L)
 {/*本算法通过向一个空的顺序表中树突元素啊来建立顺序表*/
	 int i;
	 printf("\n 待输入元素个数n=?");
	 scanf("%d",&L->length);
	 for(i=0;i<L->length;i++)
	 { printf("\n data %d=?",i);
	   scanf("%d",(*L).elem);
	 }
 }


 int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
 { /* 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0) */
   /* 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。 */
   /*           若这样的数据元素不存在,则返回值为0。算法2.6 */
   ElemType *p;
   int i=1; /* i的初值为第1个元素的位序 */
   p=L.elem; /* p的初值为第1个元素的存储位置 */
   while(i<=L.length&&!compare(*p++,e))
     ++i;
   if(i<=L.length)
     return i;
   else
     return 0;
 }

 

 
 Status ListInsert(SqList *L,int i,ElemType e) /* 算法2.4 */
 { /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 */
   /* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
   ElemType *newbase,*q,*p;
   if(i<1||i>(*L).length+1) /* i值不合法 */
     return ERROR;
   if((*L).length>=(*L).listsize) /* 当前存储空间已满,增加分配 */
   {
     newbase=(ElemType *)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(ElemType));
     if(!newbase)
       exit(OVERFLOW); /* 存储分配失败 */
     (*L).elem=newbase; /* 新基址 */
     (*L).listsize+=LISTINCREMENT; /* 增加存储容量 */
   }
   q=(*L).elem+i-1; /* q为插入位置 */
   for(p=(*L).elem+(*L).length-1;p>=q;--p) /* 插入位置及之后的元素右移 */
     *(p+1)=*p;
   *q=e; /* 插入e */
   ++(*L).length; /* 表长增1 */
   return OK;
 }

 Status ListDelete(SqList *L,int i,ElemType *e) /* 算法2.5 */
 { /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
   /* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */
   ElemType *p,*q;
   if(i<1||i>(*L).length) /* i值不合法 */
     return ERROR;
   p=(*L).elem+i-1; /* p为被删除元素的位置 */
   *e=*p; /* 被删除元素的值赋给e */
   q=(*L).elem+(*L).length-1; /* 表尾元素的位置 */
   for(++p;p<=q;++p) /* 被删除元素之后的元素左移 */
     *(p-1)=*p;
   (*L).length--; /* 表长减1 */
   return OK;
 }

 Status PrintList(SqList)
 { /*依次输入顺序表L中的每个数据元素的值*/
	 ELemType *p;
	 int i;
	 p=L.elem;
	 printf("/n 顺序表L中的元素:\n");
	 for(i=1;i<=L.length;i++)  
		 printf("%6d",L.elem[i-1]);
	 printf("\n");
	 return OK;
 }
 


 main()
 { 
	 int select,x,i;
	 SeqList L;
	 InitList(&L);
	 CreatList(&L);
	 while(1)
	 {  printf(" 请选择要进行的操作:\n");
	    printf("0--------退出\n");
		printf("1--------查找\n");
        printf("2--------插入\n");
		printf("3--------删除\n");
		printf("4--------输出\n");
		scanf("%d",&select);
		switch  (select)
		{
		  case 1:
			  printf("输入要查找的元素值");
			  scanf("%d",&x);
			  i=LocateElem(L,x);
			  if(i==0)printf("要查找的元素不存在\n");
			  else printf("找到的位置为%d\n",i);
			  break;
			  
		  case 2:
			  printf("输入要插入的位置");
			  scanf("%d",&i);
			  printf("输入要插入的元素值");
			  scanf("%d",&x);
			  ListInsert(SqList &L,i,x)
			  break;
			  
		  case 3:
			  printf("输入要删除的元素的位置");
			  scanf("%d",&i);
			  ListDelete(&L,i&x);
			  printf("元素%d已被删除 \n",x);
              break;
			  
		  case 4:
			  printList(L)
			  break;
		  case 0:
			  printf("程序结束,再见\n");
			  exit(0);
		}
	 }
 }

⌨️ 快捷键说明

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