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

📄 1.c

📁 采用顺序或链式存储方式存储线性表
💻 C
字号:
#include <stdio.h>   
#include <stdlib.h>   
#define LIST_INIT_SIZE 100
typedef int ElemType;   
typedef struct seqlist {   
ElemType *data_address;   
int listsize,listlength;   
}seqlist;     
 
//初始化线性表
void initlist(seqlist *L,int n)   
 {   
  L->data_address=(ElemType *)malloc(n*sizeof(ElemType));   
  if(L->data_address==NULL)   
  exit(1);   
  L->listsize=n;       /*表大小为n */  
  L->listlength=0;    /*空表长度为0(元素个数)*/
  }      

//插入元素   
void Insertelem(seqlist *L,int pos,ElemType item) /*在pos位置插入元素item*/
  {   
   int i;  
 if(L->listlength==L->listsize)   
  {   
  printf("表元素已满!");   
  exit(1);   
  }   
 if(pos<1|| pos>L->listlength+1)   
  { printf("目标位置不合法!");   
    exit(1);   
  } 
 for(i=L->listlength-1;i>=(pos-1);--i)   
 { L->data_address[i+1]=L->data_address[i]; } 
   L->data_address[pos-1]=item;   
   L->listlength++;   
  }      
void Insertrear(seqlist *L,ElemType item)   
  {   
   if(L->listlength==L->listsize)   
  {   
   printf("表已满!");   
   exit(1);   
  }   
   L->data_address[L->listlength]=item;   
   L->listlength++;   
  }   
    
//删除pos位置元素    
void Deletelem(seqlist *L,int pos)   
  {   
   int i;   
   if(L->listlength==0)   
  { printf("表为空!");   
  exit(1);   
  }     
  if(pos<1||pos>L->listlength)   
  {printf("目标位置不合法!");   
   exit(1);   
  }   
  for(i=L->data_address[pos-1];i<=L->listlength-1;++i)   
  {   
   L->data_address[i-1]=L->data_address[i];   
  }   
   L->listlength--;
  }      

//查找pos位置的元素
ElemType Getelem(seqlist *L,int pos)   
  {   
   if(pos<1 || pos > L->listlength)   
  { printf("pos位置不合法!");   
   exit(1);   
  }   
  return (L->data_address[pos-1]);   
  }     
//合并线性表 
void MergeList(seqlist La,seqlist Lb,seqlist *Lc)
{   
	ElemType *pa,*pb,*pc,*pa_last,*pb_last;
	pa=La.data_address;
	pb=Lb.data_address;
	Lc->listsize=Lc->listlength=La.listlength+Lb.listlength;
	pc=Lc->data_address=(ElemType*)malloc(Lc->listsize*sizeof(ElemType));
	if(!Lc->data_address) exit(1);
	pa_last=La.data_address+La.listlength-1;
	pb_last=Lb.data_address+Lb.listlength-1;
	while(pa<=pa_last&&pb<=pb_last)
	{
		if(*pa<=*pb) *pc++=*pa++;
		else *pc++=*pb++;
	}
	while(pa<=pa_last) *pc++ = *pa++;
    while(pb<=pb_last) *pc++ = *pb++;

}

//求表长
  int Listlength(seqlist *L)   
  {   
   return(L->listlength);   
  }

//清空表元素   
void Clearlist(seqlist *L)   
  {   
   L->listlength=0; /*表元素个数置空*/
  }   
 
//释放空间
void Freelist(seqlist *L)   
  {   
  free(L->data_address);   
  } 

//输出线性表
void Printlist(seqlist *L)   
  {   
   int   n,i;   
   n=Listlength(L);   
   for(i=0;i<n;++i)   
  {   
   printf("%6d",L->data_address[i]);   
  }   
   printf("\n");   
  }   

   
void main()   
  {  
   int i,m,n,d,a; 
   int pos;
   seqlist L,La,Lb,Lc;
   initlist(&L,100);
   printf("表中需要几个元素:\n"); 
   scanf("%d",&n);
   printf("请依次输入元素:\n"); 
   for(i=0;i<n;i++)
   {
    scanf("%d",&d);
     Insertrear(&L,d);
   }
   printf("表中元素为:\n");
   Printlist(&L);
   printf("\n");
	
   do {                     //从菜单中选择遍历方式,输入序号。
        printf("\t*******************请选择********************\n");
        printf("\t☆                                         ☆\n");
        printf("\t☆                1: 插入元素              ☆\n");    
        printf("\t☆                                         ☆\n");
        printf("\t☆                2: 删除元素              ☆\n");
        printf("\t☆                                         ☆\n");
        printf("\t☆                3: 查找元素              ☆\n");
        printf("\t☆                                         ☆\n");
		printf("\t☆                4: 合并                  ☆\n");
        printf("\t☆                                         ☆\n");
        printf("\t☆                0: 退出                  ☆\n");
        printf("\t☆                                         ☆\n");
        printf("\t*********************************************\n");
    printf("您的选择:");
    scanf("%d",&i);    //输入菜单序号(0-4)
    printf("您选择的操作是:");
    switch (i){
	        case 0:
                printf("退出!\n");
				printf("谢谢使用,再见!O(∩_∩)O");
            break;   
			
            case 1: 
	             printf("线性表的插入\n");
                 printf("请输入你想插入的元素:\n");
                 scanf("%d",&m);
                 printf("您想将元素插在第几个的位置:\n");
                 scanf("%d",&pos);
                 Insertelem(&L,pos,m);
                 printf("插入后线性表中元素为:\n");
                 Printlist(&L);
                 printf("\n");
            break;

            case 2: 
				 printf("线性表的删除\n");
                 printf("请输入要删除元素的位置:\n");
                 scanf("%d",&pos);
                 Deletelem(&L,pos);
                 printf("删除后线性表中元素为:\n");
                 Printlist(&L);
                 printf("\n");
            break;

            case 3: 
                 printf("线性表的查找\n");
	             printf("您想查找元素的位置是:\n");
                 scanf("%d",&a);
                 Getelem(&L,a);
                 printf("您查找的元素是:");
                 printf("%d\n",L.data_address[a-1]);
            break;

            case 4: 
			   	 initlist(&La,100);
                 initlist(&Lb,100);
                 printf("线性表的合并\n");
	             printf("请输入线性表La,表中需要几个元素:\n");
                 scanf("%d",&n);
                 printf("请依次输入元素:\n"); 
                 for(i=0;i<n;i++)
				 {
                   scanf("%d",&d);
                   Insertrear(&La,d);
				 }
				 printf("线性表La是:\n");
                 Printlist(&La);
                 printf("请输入线性表Lb,表中需要几个元素:\n");
                 scanf("%d",&n);
                 printf("请依次输入元素:\n"); 
                 for(i=0;i<n;i++)
				 {
                   scanf("%d",&d);
                   Insertrear(&Lb,d);
				 }
				 printf("线性表Lb是:\n");
                 Printlist(&Lb);
                 printf("合并后的线性表Lc是:\n");
                 MergeList(La,Lb,&Lc);
                 Printlist(&Lc);
            break;

            default: exit(1);
			}

    } while(i!=0);
   system("pause"); 
   Clearlist(&L);
   Freelist(&L);   
  }

⌨️ 快捷键说明

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