题目:
完成顺序表的按值修改、按位置查找、排序、最值、去重
代码:
main.c
#include"seqlist.h"
int main(int argc, const char *argv[])
{
seqlist *L=list_create();
if(NULL==L) return -1;
list_add(L,5);
list_add(L,4);
list_add(L,4);
list_add(L,3);
list_add(L,5);
list_add(L,2);
list_add(L,2);
list_add(L,4);
list_add(L,1);
list_add(L,5);
list_add(L,2);
list_add(L,2);
list_add(L,4);
list_add(L,1);
list_add(L,1);
list_add(L,5);
list_add(L,4);
list_add(L,5);
list_add(L,1);
list_add(L,4);
list_display(L);
list_insert_pos(L,4,2);
list_display(L);
list_delete_pos(L,4);
list_display(L);
list_update_pos(L,0,3);
list_display(L);
// printf("%d下标为%d\n",3,list_search_value(L,3));
// list_free(&L);
// list_display(L);
list_update_value(L,4,2);
list_display(L);
printf("%d\n",list_search_pos(L,-1));
list_change(L);
list_display(L);
printf("%d\n",list_max(L));
list_delete_repeat(L);
list_display(L);
return 0;
}
seqlist.c
#include"seqlist.h"
seqlist *list_create()
{
seqlist *L=(seqlist *)malloc(sizeof(seqlist));
if(NULL==L)
{
printf("创建失败\n");
return NULL;
}
bzero(L,sizeof(seqlist));
printf("创建成功\n");
return L;
}
int list_empty(seqlist *L)
{
return L->len==0 ? 1:0;
}
int list_full(seqlist *L)
{
return L->len==MAX ? 1:0;
}
int list_add(seqlist *L,datatype e)
{
if(list_full(L))
{
printf("表满,添加失败\n");
return 0;
}
L->data[L->len]=e;
L->len++;
printf("添加成功\n");
return 1;
}
void list_display(seqlist *L)
{
if(NULL==L||list_empty(L))
{
printf("数组为空,遍历失败\n");
return;
}
printf("分别为:");
for(int i=0;i<L->len;i++)printf("%d\t",L->data[i]);
printf("\n");
}
int list_insert_pos(seqlist *L,int pos,datatype e)
{
if(list_full(L)||pos>L->len||pos<0)
{
printf("插入失败\n");
return 0;
}
for(int i=L->len-1;i>=pos;i--) L->data[i+1]=L->data[i];
L->data[pos]=e;
L->len++;
printf("插入成功\n");
return 1;
}
int list_delete_pos(seqlist *L,int pos)
{
if(list_empty(L)||pos>L->len||pos<0)
{
printf("删除失败\n");
return 0;
}
for(int i=pos+1;i<L->len;i++) L->data[i-1]=L->data[i];
L->len--;
printf("删除成功\n");
return 1;
}
int list_update_pos(seqlist *L,int pos,datatype e)
{
if(list_empty(L)||pos<0||pos>=L->len)
{
printf("修改失败\n");
return 0;
}
L->data[pos]=e;
printf("修改成功\n");
return 1;
}
int list_update_value(seqlist *L,datatype old_e,datatype new_e)
{
int flag=0;
if(list_empty(L))
{
printf("修改失败\n");
return 0;
}
for(int i=0;i<L->len;i++)
{
if(L->data[i]==old_e)
{
L->data[i]=new_e;
flag=1;
}
}
if(flag==1)
{
printf("修改成功\n");
return 1;
}
printf("修改失败\n");
return 0;
}
int list_search_pos(seqlist *L,int pos)
{
if(list_empty(L)||pos<0||pos>=L->len)
{
printf("查找失败\n");
return -1;
}
return L->data[pos];
}
int list_search_value(seqlist *L,datatype e)
{
if(list_empty(L))
{
printf("查找失败\n");
return -1;
}
for(int i=0;i<L->len;i++)
{
if(L->data[i]==e) return i;
}
return -1;
}
void list_free(seqlist **L)
{
if(L!=NULL)
{
free(*L);
*L=NULL;
printf("销毁成功\n");
}
}
int list_change(seqlist *L)
{
datatype temp;
if(list_empty(L))
{
printf("排序失败\n");
return -1;
}
for(int i=0;i < L->len-1;i++)
{
for(int j=0;j < L->len-1-i;j++)
{
if(L->data[j] > L->data[j+1])
{
temp=L->data[j];
L->data[j]=L->data[j+1];
L->data[j+1]=temp;
}
}
}
printf("排序成功\n");
return 0;
}
int list_max(seqlist *L)
{
datatype max=0;
if(list_empty(L))
{
printf("找最值失败\n");
return -1;
}
for(int i=0;i<L->len;i++)
{
if(L->data[i]>L->data[max])max=i;
}
return L->data[max];
}
int list_delete_repeat(seqlist *L)
{
int j=0;
int k=0;
if(list_empty(L))
{
printf("找最值失败\n");
return -1;
}
for(int i=0;i<L->len;i++)
{
j=i;
k=i;
while(k < L->len)
{
if(L->data[i]!=L->data[k])
{
j++;
L->data[j]=L->data[k];
}
k++;
}
L->len=j+1;
}
return 0;
}
seqlist.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX];
int len;
}seqlist;
seqlist *list_create();
int list_empty(seqlist *L);
int list_full(seqlist *L);
int list_add(seqlist *L,datatype e);
void list_display(seqlist *L);
int list_insert_pos(seqlist *L,int pos,datatype e);
int list_delete_pos(seqlist *L,int pos);
int list_update_pos(seqlist *L,int pos,datatype e);
int list_search_value(seqlist *L,datatype e);
int list_update_value(seqlist *L,datatype old_e,datatype new_e);
void list_free(seqlist **L);
int list_search_pos(seqlist *L,int pos);
int list_change(seqlist *L);
int list_max(seqlist *L);
int list_delete_repeat(seqlist *L);
#endif
运行结果:
ubuntu@ubuntu:~$ ./a.out
创建成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
添加成功
分别为:5 4 4 3 5 2 2 4 1 5 2 2 4 1 1 5 4 5 1 4
插入失败
分别为:5 4 4 3 5 2 2 4 1 5 2 2 4 1 1 5 4 5 1 4
删除成功
分别为:5 4 4 3 2 2 4 1 5 2 2 4 1 1 5 4 5 1 4
修改成功
分别为:3 4 4 3 2 2 4 1 5 2 2 4 1 1 5 4 5 1 4
修改成功
分别为:3 2 2 3 2 2 2 1 5 2 2 2 1 1 5 2 5 1 2
查找失败
-1
排序成功
分别为:1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 5 5 5
5
分别为:1 2 3 5