数据结构-线性表的顺序储存

 
 
#include"stdio.h"
#include"stdlib.h"
#include"conio.h" 
#define LIST_SIZE 1000
typedef struct{ 
  int length;
  int data[LIST_SIZE];
}SqList;
void List_Init(SqList &L)  //线性表初始化
{int i;
 for(i=0;i<=LIST_SIZE-1;i++)
 L.data[i]=NULL;
 L.length=0;
}
void List_Insert(SqList &L,int i,int e)   
{
  if(i<1||i>L.length+1) {printf("此位置不在允许范围!\n");}
  else if(L.length>=LIST_SIZE)
    printf("储存空间不足\n");
  else{
  int *q=&L.data[i-1];
  for(int *p=&L.data[L.length-1];p>=q;--p) *(p+1)=*p; 
  *q=e;
  ++L.length;
  printf("插入成功!\n");
  }
}
void List_Delete_Pos(SqList &L,int i) 
{ if(i<1||i>L.length+1) {printf("此位置不在允许范围!\n");}
  else{
  int *q=&L.data[i-1];
  for(int *p=&L.data[L.length-1];p>=q+1;q++) *q=*(q+1);
  --L.length;
  printf("删除成功!\n") ;  
  }
}
void List_Delete_Elem(SqList &L,int e)
{   
    
    int j,count=0;
	for(j=0;j<=L.length-1;j++)
	if(L.data[j]==e) 
	{
	int *q=&L.data[j];
    for(int *p=&L.data[L.length-1];p>=q+1;q++) *q=*(q+1);
    --L.length;	count++;
	printf("删除成功!次数:%d\n",count) ; 

	}
	if(count==0) printf("顺序表中未找到此元素!\n");

}
void List_Replce_Pos(SqList &L,int i,int e) 
{  
	if(i<1||i>L.length+1) {printf("此位置不在允许范围!\n");}
    else{ L.data[i-1]=e; printf("替换成功!\n") ;} 
}
void List_Replace_Elem(SqList &L,int e,int a)
{   
    int j,count=0;
	for(j=0;j<=L.length-1;j++)
	if(L.data[j]==e) 
	{
    L.data[j]=a;count++;
    printf("替换成功!次数:%d\n",count);
    
    }
	if(count==0) printf("顺序表中未找到此元素!\n");
}
void List_Find_Pos(SqList &L,int i) 
{   if(i<1||i>L.length+1) {printf("此位置不在允许范围!\n");}
	else printf("此位置的元素为:%d\n",L.data[i-1]);
}
void List_Find_Elem(SqList &L,int e)
{
	int j,flag=0;
	printf("经查找,结果如下:\n");
	for(j=0;j<=L.length-1;j++)
	if(L.data[j]==e) 
	{
    printf("位置:%d ",j+1); 
    flag=1;
    }
    if(flag==0) printf("线性表中没有找到此元素!"); 
    printf("\n");
}
void List_Show_All(SqList &L) 
{   int j;
    printf("线性表中所有元素如下:\n"); 
	for(j=0;j<=L.length-1;j++)
	printf("%d\n",L.data[j]);
}
void List_Show_Length(SqList &L)
{
	printf("线性表长度为:%d\n",L.length);
}
void List_Clear(SqList &L)
{ 
List_Init(L); 
printf("线性表已清空!\n");
}
void mainmenu()
{ 
  printf("**********顺序表操作功能菜单***************\n");
  printf("1.插入元素          2.按位置删除           \n");
  printf("3.按元素删除        4.按位置查找           \n");
  printf("5.按元素查找        6.查看所有元素         \n");
  printf("7.查看表长          8.清空表               \n");
  printf("9.按位置替换        10.按元素替换          \n");
  printf("11.退出程序                                \n");
  printf("*******************************************\n");
} 
int main()
{  
   SqList L;
   List_Init(L); 
   
   loop:
   mainmenu();
    
   int x;
   int i,e;
 
   printf("请输入功能选项的相应序号:\n");
   scanf("%d",&x);
  
   system("cls");
  
   switch(x)
   { 
 
   case 1:
   	   printf("请输入要插入元素的位置和要插入的元素的值:\n"); 
	   scanf("%d%d",&i,&e);
	   List_Insert(L,i,e);
	   
	   system("pause");
	   system("cls");
	   goto loop;
	   break;
   	
   case 2:
   		printf("请输入要删除元素的位置:\n"); 
	   scanf("%d",&i);
	   List_Delete_Pos(L,i);
	   
	   system("pause");
	   system("cls");
	   goto loop;
	   break;

	case 3:
	  printf("请输入要删除的元素的值:\n"); 
	  scanf("%d",&e);
	  List_Delete_Elem(L,e);
	 
	   system("pause");
	   system("cls");
	   goto loop;
	   break;
  
    case 4:	
	printf("请输入要查找元素的位置:\n"); 
	scanf("%d",&i);
	List_Find_Pos(L,i);
	   system("pause");
	system("cls");
	   goto loop;
	break;

	case 5: 
	printf("请输入要查找的元素的值:\n"); 
	scanf("%d",&e);
	List_Find_Elem(L,e);
	   system("pause");
	system("cls");
	   goto loop;
	break;
  
    case 6:
	List_Show_All(L);
	   system("pause");
	system("cls");
	   goto loop;
	break;

	case 7:
	List_Show_Length(L);
	   system("pause");
	system("cls");
	   goto loop;
	break;

    case 8:
	List_Clear(L);
	   system("pause");
	system("cls");
	   goto loop;
	break;
  
    case 9: 
    printf("请输入被替代元素的位置和替代元素的值:\n"); 
	scanf("%d%d",&i,&e);
	List_Replce_Pos(L,i,e);
	
	   system("pause");
	system("cls");
	   goto loop;
	break;
  
    case 10:
    printf("请输入被替代元素的值和替代元素的值:\n"); 
    scanf("%d%d",&e,&i);
	List_Replace_Elem(L,e,i);

	   system("pause");
	system("cls");
	   goto loop;
	break;
  
    case 11:
    printf("感谢您的使用!!\n"); 
	   system("pause");
	return 0;

	default:
		printf("输入有误!\n");
        system("pause");
    	system("cls");
	    goto loop;
	break;
  }
  return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_40251838/article/details/80548530