数据结构作业二

作业二

image-20220417212842255

1

时间复杂度o(n)

先判断是否比最后一个大 大的话直接插入到最后一个后面

再找到第一次出现比前一个大的时候直接插入

#include<stdio.h>
#include<stdlib.h>  
typedef int datatype;
# define arrsize 100
typedef struct
{
    datatype data[arrsize];
    int last;
}SeqList;
SeqList *init_SeqList()
{  
    SeqList *L;
    L= (SeqList*)malloc(sizeof(SeqList));
    if(L) 
       {  
		      L->last=-1;
              return L; 
	   }           
    else exit(-1);
}
int insert_SeqList(SeqList *L,int i,datatype x)
{
    int j;
    if(L->last==arrsize-1){return -1;} 
    if(i<1||i>L->last+2){return 0;}
    for (j=L->last;j>=i-1;j--)
          L->data[j+1]=L->data[j]; 
    L->data[i-1]=x;
    L->last++;
    return 1;
}
void display_SeqList(SeqList *L)
{
	for(int i=0;i<L->last+1;i++){
		printf("%d ",L->data[i]);
	}
}
int main(){
    SeqList *A;
    datatype temp,num;
    int elenum,flag=0;
    A=init_SeqList();
    scanf("%d",&elenum);
    for(int i=1;i<elenum+1;i++){
    	scanf("%d",&temp);
    	insert_SeqList(A,i,temp);
    }
    scanf("%d",&num);
    if(num>=A->data[elenum-1]){
    	insert_SeqList(A,elenum+1,num);
    	display_SeqList(A);
    	return 0;
	}
    for(int i=0;i<A->last+1;i++)
      if(num<=A->data[i]&&flag==0){
      	insert_SeqList(A,i+1,num);
      	display_SeqList(A);
      	return 0;
	  }
	  
}

image-20220417184025879

2

参数L->data数组为要处理的数据

length存储数组长度

返回值失败返回0,成功返回1

#include<stdio.h>
#include<stdlib.h>  
typedef int datatype;
# define arrsize 100
typedef struct
{
    datatype data[arrsize];
    int last;
}SeqList;
SeqList *init_SeqList()
{  
    SeqList *L;
    L= (SeqList*)malloc(sizeof(SeqList));
    if(L) 
       {  
        L->last=-1;
              return L; 
    }           
    else exit(-1);
}
int insert_SeqList(SeqList *L,int i,datatype x)
{
    int j;
    if(L->last==arrsize-1){return -1;} 
    if(i<1||i>L->last+2){return 0;}
    for (j=L->last;j>=i-1;j--)
          L->data[j+1]=L->data[j]; 
    L->data[i-1]=x;
    L->last++;
    return 1;
}
int delete_SeqList(SeqList *L, int* length) {
 if (*length == 0)
  return 0;
 int i,j;
 for (i = 0, j = 1; j < *length; j++) 
  if (L->data[i] != L->data[j])
   L->data[++i] = L->data[j];
 *length = i + 1;
 return 1;
}
int main(){
    SeqList *A;
    datatype temp,num;
    A=init_SeqList();
    for(int i=1;;i++){
     scanf("%d",&temp);
     insert_SeqList(A,i,temp);
     if(getchar()!=' ')break;
    }
    int len=A->last+1;
    if(delete_SeqList(A,&len)){
  for (int i = 0; i < len; i++)
   printf("%d ", A->data[i]);
 }
}

image-20220417195910346

3

对顺序表A,从前向后依次判断当前元素L->data[i]是否介于x与y之间,若是,并不马上删除,而是用n记录删除时应前移元素的位移量;若不是,则将L->data[i]向前移动n位。n用来记录当前已删除元素的个数。

#include<stdio.h>
#include<stdlib.h>  
typedef int datatype;
# define arrsize 100
typedef struct
{
    datatype data[arrsize];
    int last;
}SeqList;
SeqList *init_SeqList()
{  
    SeqList *L;
    L= (SeqList*)malloc(sizeof(SeqList));
    if(L) 
       {  
        L->last=-1;
              return L; 
    }           
    else exit(-1);
}
int insert_SeqList(SeqList *L,int i,datatype x)
{
    int j;
    if(L->last==arrsize-1){return -1;} 
    if(i<1||i>L->last+2){return 0;}
    for (j=L->last;j>=i-1;j--)
          L->data[j+1]=L->data[j]; 
    L->data[i-1]=x;
    L->last++;
    return 1;
}
void delete_SeqList(SeqList *L,int x,int y)
{
  int i=0,n=0;
  while(i<L->last+1){
    if(L->data[i]>=x&&L->data[i]<=y)n++;
    else L->data[i-n]=L->data[i];
      i++;
    }
    L->last-=n;
} 
void display_SeqList(SeqList *L)
{
 for(int i=0;i<L->last+1;i++){
  printf("%d ",L->data[i]);
 }
}
int main(){
    SeqList *A;
    datatype temp,num;
    A=init_SeqList();
    for(int i=1;;i++){
     scanf("%d",&temp);
     insert_SeqList(A,i,temp);
     if(getchar()!=' ')break;
    }
    int x,y;
    scanf("%d %d",&x,&y);
    delete_SeqList(A,x,y);
    display_SeqList(A);
}

image-20220417212420530

4

#include<stdio.h>
#include<stdlib.h>  
typedef char datatype;
# define arrsize 100
typedef struct
{
    datatype data[arrsize];
    int last;
}SeqList;
SeqList *init_SeqList()
{  
    SeqList *L;
    L= (SeqList*)malloc(sizeof(SeqList));
    if(L) 
       {  
        L->last=-1;
        return L; 
    }           
    else exit(-1);
}
int insert_SeqList(SeqList *L,int i,datatype x)
{
    int j;
    if(L->last==arrsize-1){return -1;} 
    if(i<1||i>L->last+2){return 0;}
    for (j=L->last;j>=i-1;j--)
          L->data[j+1]=L->data[j]; 
    L->data[i-1]=x;
    L->last++;
    return 1;
}
void display_SeqList(SeqList *L)
{
 for(int i=0;i<L->last+1;i++){
  printf("%c",L->data[i]);
 }
}
int is_char(char c){ 
	if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){
		return 1;
	}
	else return 0;
}
int is_num(char c){
	if(c>='0'&&c<='9')return 1;

	else return 0;
}
void Sort_Letter(SeqList *L){
	int left=0,right=L->last,temp;
	while(left<right){
		while((left<right)&&is_char(L->data[left]))left++;
		while((left<right)&&!(is_char(L->data[right])))right--;
		if(left<right){    
			temp=L->data[left];
			L->data[left]=L->data[right];
			L->data[right]=temp;
		}
	}  
	right=L->last;
	while(left<right){
		while((left<right)&&is_num (L->data[left]))left++;
		while((left<right)&&!(is_num(L->data[right])))right--;
		if(left<right){ 
			temp=L->data[left];
			L->data[left]=L->data[right];
			L->data[right]=temp;
		}
	}	 
}
int main(){
    SeqList *A;
    datatype temp,num;
    A=init_SeqList();
    int n;
    scanf("%d",&n);
    getchar();
    for(int i=1;i<=n;i++){
     scanf("%c",&temp);
     insert_SeqList(A,i,temp);
    }
    Sort_Letter(A);
    display_SeqList(A);
}

image-20220417205601766

5

#include<stdio.h>
#include<stdlib.h>  
typedef int datatype;
# define arrsize 100
typedef struct
{
    datatype data[arrsize];
    int last;
}SeqList;
SeqList *init_SeqList()
{  
    SeqList *L;
    L= (SeqList*)malloc(sizeof(SeqList));
    if(L) 
       {  
        L->last=-1;
        return L; 
    }           
    else exit(-1);
}
int insert_SeqList(SeqList *L,int i,datatype x)
{
    int j;
    if(L->last==arrsize-1){return -1;} 
    if(i<1||i>L->last+2){return 0;}
    for (j=L->last;j>=i-1;j--)
          L->data[j+1]=L->data[j]; 
    L->data[i-1]=x;
    L->last++;
    return 1;
}
void display_SeqList(SeqList *L)
{
 for(int i=0;i<L->last+1;i++){
  printf("%d ",L->data[i]);
 }
}
void swap_SeqList(SeqList *L,int m,int n)
{
	int i,k,x;
  if(m<=n)
    for(i=1;i<=m;i++){
    	x=L->data[0];
    	for(k=1;k<=L->last;k++)
    	    L->data[k-1]=L->data[k];
    	L->data[L->last]=x;
	}
  else for(i=1;i<=n;i++){
  	x=L->data[L->last];
  	  for(k=L->last;k>=0;k--)
  	     L->data[k+1]=L->data[k];
  	L->data[0]=x;
  }
} 
int main(){
    SeqList *A;
    datatype temp,num;
    A=init_SeqList();
    for(int i=1;;i++){
     scanf("%d",&temp);
     insert_SeqList(A,i,temp);
     if(getchar()!=' ')break;
    }
    display_SeqList(A);
    int m,n;
    scanf("%d%d",&m,&n);
    swap_SeqList(A,m,n);
    display_SeqList(A);
}

image-20220417210838899

posted @ 2022-04-17 21:28  m1m0ry  阅读(176)  评论(0编辑  收藏  举报