按位置增删改查:
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct {
int arr[N];
int pos;
} User;
User* creat_arr(void);
void add_arr(User*);
void print_arr(User*);
void remove_arr(User*);
void change_arr(User*);
void find_arr(User*);
int main(int argc, const char *argv[])
{
User* u = creat_arr();
int b=1;
while(b==1){
printf("请选择你想要执行的操作!\n");
printf("0:退出\n1:在顺序表末尾添加一个元素\n2:删除末尾的一个元素\n3:修改末尾的一个元素\n4:查找某一下标的数据\n5:遍历顺序表\n");
int a=0;
scanf("%d",&a);
switch(a){
case 1:{
add_arr(u);
break;
}
case 2:{
remove_arr(u);
break;
}
case 3:{
change_arr(u);
break;
}
case 4:{
find_arr(u);
break;
}
case 5:{
print_arr(u);
break;
}
case 0:{
b=0;break;
}
}
}
return 0;
}
//创建
User* creat_arr(void){
User *s = (User*) malloc(sizeof(User));
if(NULL==s)
return NULL;
s->pos=0;
//内存置位,全部置零
//memset(s,0,sizeof(s));
return s;
}
//增加
void add_arr(User* u){
if(10<=u->pos){
printf("该顺序表已装满!pos值为:%d\n",u->pos);
return ;
}
printf("当前下标为:%d,请输入您想填入的数据!\n",u->pos);
scanf("%d",&u->arr[u->pos++]);
}
//删除
void remove_arr(User* u){
if(0==u->pos){
printf("当前顺序表为空,操作失败!\n");
return ;
}
int rm = u->arr[--u->pos];
u->arr[u->pos]=0;//可以不改为0,因为下次增加数据还是会被覆盖
printf("删除元素为:%d,当前下标为:%d,值为:%d\n",rm,u->pos,u->arr[u->pos]);
}
//修改
void change_arr(User* u){
if(10<u->pos||u->pos<=0){
printf("修改失败,pos指向有误!\n");
return ;
}
int ch=u->arr[u->pos-1];
scanf("%d",&u->arr[u->pos-1]);
printf("修改前的数据为:%d,修改后的数据为:%d\n",ch,u->arr[u->pos-1]);
}
//查找
void find_arr(User* u){
label:
printf("请输入要查找数据的下标!大于等于0小于%d\n",u->pos);
int num=0;
scanf("%d",&num);
if(num>=u->pos||num<0){
printf("输入下标有误!\n");
goto label;
}
printf("当前下标的数据为:%d\n",u->arr[num]);
}
//打印
void print_arr(User* u){
printf("开始遍历顺序表!\n");
if(u->pos==0){
printf("当前顺序表为空\n");
return;
}
for(int i=0;i<u->pos;i++)
printf("当前下标为%d,存储内容为:%d\n",i,u->arr[i]);
}
按数据增删改查
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
typedef struct {
int arr[N];
int pos;
} User;
User* creat_arr(void);
void print_arr(User*);
void remove_arr(User*,int);
void change_arr(User*,int);
int* find_arr(User*,int);
void insert_arr(User*);
int main(int argc, const char *argv[])
{
User* u = creat_arr();
u->arr[0]=9;
u->arr[1]=7;
u->arr[2]=3;
u->arr[3]=9;
u->arr[4]=3;
u->arr[5]=9;
u->pos = 6;
if(u==NULL)
return 0;
int b=1,num=0;
while(b==1){
printf("请选择你想要执行的操作!\n");
printf("0:退出\n1:在顺序表指定位置添加一个元素\n2:删除表中指定的数据\n3:修改表中指定的数据\n4:查找某个数据的下标\n5:遍历顺序表\n");
int a=0;
scanf("%d",&a);
switch(a){
case 1:{
insert_arr(u);
break;
}
case 2:{
printf("请输入要删除的数据!\n");
scanf("%d",&num);
remove_arr(u,num);
break;
}
case 3:{
printf("请输入要修改的数据!\n");
scanf("%d",&num);
change_arr(u,num);
break;
}
case 4:{
printf("请输入要查找的数据!\n");
scanf("%d",&num);
int *a = find_arr(u,num);
if(*a==-1){
printf("查无此数\n");
break;}
printf("该数据在数组中的下标为:");
for(int i=0;*(a+i)!=-1;i++)
printf("%-3d",*(a+i));
putchar(10);
break;
}
case 5:{
print_arr(u);
break;
}
case 0:{
b=0;break;
}
}
printf("-----------------------------------------\n");
}
free(u);
return 0;
}
//创建
User* creat_arr(void){
User *s = (User*) malloc(sizeof(User));
if(NULL==s)
return NULL;
s->pos=0;
//内存置位,全部置零
//memset(s,0,sizeof(s));
return s;
}
//按位置插入
void insert_arr(User* u){
if(10<=u->pos){
printf("该顺序表已满!\n");
return;
}
label2:
printf("请输入想要插入的位置(0~%d)和数据,空格隔开!\n",N-1);
int place=0,data=0;
scanf("%d %d",&place,&data);
if(place>=N||place<0){
printf("插入位置不合法!\n");
goto label2;
}
place>u->pos ? place=u->pos : place;
for(int i=u->pos;i!=place;i--)
u->arr[i]=u->arr[i-1];
u->arr[place]=data;
u->pos++;
}
//按照数据删除
void remove_arr(User* u,int num){
int *a = find_arr(u,num),i=0;
if(*a==-1){
printf("该顺序表中没有%d这个数据\n",num);
return;
}
for(;*(a+i)!=-1;i++)
for(int j=*(a+i);*(a+i+1)!=-1?j<*(a+i+1)-1:j<u->pos;j++){
u->arr[j-i]=u->arr[j+1];
}
u->pos-=i;
}
//按照数据修改
void change_arr(User* u,int num){
int *a=find_arr(u,num);
if(*a==-1){
printf("该顺序表中没有%d这个数据\n",num);
return;
}
printf("请输入修改后的数据\n");
int chnum ;
scanf("%d",&chnum);
for(int i=0;*(a+i)!=-1;i++)
u->arr[*(a+i)]=chnum;
}
//按照数据查找
int* find_arr(User* u,int num){
int j=0;
static int arr2[N+1];
memset(arr2,-1,sizeof(arr2));
for(int i=0;i<u->pos;i++)
if(u->arr[i]==num){
arr2[j++]=i;
}
return arr2;
}
//打印
void print_arr(User* u){
printf("开始遍历顺序表!\n");
if(u->pos==0){
printf("当前顺序表无数据!\n");
return;
}
for(int i=0;i<u->pos;i++)
printf("当前下标为%d,存储内容为:%d\n",i,u->arr[i]);
}
#include <stdio.h>
#include <stdlib.h>
#define N 31
typedef struct {
int arr[N];
int pos;
} List;
List* creat_arr(void);
void print_arr(List*);
void remove_arr(List*,int);
void quchong(List*);
int main(int argc, const char *argv[])
{
List* l = creat_arr();
int arr2[31]={1,2,2,1,1,3,4,3,2,4,5,3,4,5,4,1,1,2,2,1,3,4,3,2,4,5,3,4,5,4,1};
for(int i=0;i<31;i++)
l->arr[i]=arr2[i];
l->pos+=31;
print_arr(l);
quchong(l);
print_arr(l);
return 0;
}
//创建
List* creat_arr(void){
List *s = (List*) malloc(sizeof(List));
if(NULL==s)
return NULL;
s->pos=0;
//内存置位,全部置零
//memset(s,0,sizeof(s));
return s;
}
//按位置删除
void remove_arr(List *l,int num){
if(0==l->pos){
printf("该顺序表为空!!\n");
return;
}
if(num>=N||num<0){
printf("删除位置不合法!\n");
return;
}
for(int i=num;i<l->pos-1;i++)
l->arr[i]=l->arr[i+1];
l->pos--;
}
//去掉重复数据
void quchong(List *l){
for(int i=0;i<l->pos;i++)
for(int j=i+1;j<l->pos;j++)
if(l->arr[i]==l->arr[j]){
remove_arr(l,j);
j--;
}
}
//打印
void print_arr(List* l){
printf("开始遍历顺序表!\n");
if(l->pos==0){
printf("当前顺序表为空\n");
return;
}
for(int i=0;i<l->pos;i++)
printf("当前下标为%-2d,存储内容为:%d\n",i,l->arr[i]);
}