数据结构作业二
作业二
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;
}
}
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]);
}
}
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);
}
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);
}
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);
}