顺序表增删改查两种方法---C实现
来源:互联网 发布:java 设置useragent 编辑:程序博客网 时间:2024/05/21 06:40
一、无返回值的增删改查(且成员elem以指针形式)
#include <stdio.h>#include <malloc.h>#define list_init_size 100#define add_list 10#define ERROR 0#define OK 1typedef int Elemtype;typedef struct{ Elemtype *elem; int length; int listsize;}sqlist;void Initlist(sqlist *L) //初始化{ L->elem=(Elemtype *)malloc(list_init_size*sizeof(Elemtype)); if(!L->elem) printf("error"); L->length=0; L->listsize=list_init_size;}void listinsert(sqlist *L,int i,Elemtype e) //插入{ Elemtype *p,*q,*newbase; if(i<1||i>L->length+1) printf("error"); if(L->length>=L->listsize) { newbase=(Elemtype *)realloc(L->elem,(L->listsize+add_list)*sizeof(Elemtype)); L->elem=newbase; L->listsize+=add_list; } q=&(L->elem[i-1]); for(p=&(L->elem[L->length-1]);p>=q;--p) { *(p+1)=*p; } *q=e; L->length++;} void deletelist(sqlist *L,int i) //删除 { int j; if(i<1||i>L->length) printf("error"); else { for(j=i;j<=L->length-1;j++) { L->elem[j-1]=L->elem[j]; } L->length--; } } int searchlist(sqlist L,int e) //查找 { int i; for(i=0;i<L.length;i++) { if(L.elem[i]==e) return i+1; } return 0; }void dellist(sqlist *L) //删除相邻相同数据 { int i=0,j; while(i<L->length-1) { if(L->elem[i]==L->elem[i+1]) { for(j=i+1;j<L->length;j++) { L->elem[j-1]=L->elem[j]; } L->length--; } else i++; } } void changelist(sqlist *L,int i,int e)//修改 { if(i<1||i>L->length) { printf("error"); } L->elem[i]=e; }int main(){ sqlist L; int i=3; int e=8; int j; int search; Initlist(&L); for(j=0;j<5;j++) { scanf("%d",&L.elem[j]); L.length++; } listinsert(&L,i,e); for(j=0;j<L.length;j++) { printf("%d ",L.elem[j]); } printf("\n"); deletelist(&L,i); for(j=0;j<L.length;j++) { printf("%d ",L.elem[j]); } printf("\n"); dellist(&L); for(j=0;j<L.length;j++) { printf("%d ",L.elem[j]); } printf("\n"); changelist(&L,2,7); for(j=0;j<L.length;j++) { printf("%d ",L.elem[j]); } printf("\n"); printf("%d",searchlist(L,5));}
二、有返回值的增删改查(且成员elem以数组出现)
#include <stdio.h>#define list_init_size 100#define add_list 10typedef int Elemtype;typedef struct{ Elemtype elem[list_init_size]; Elemtype length;}sqlist;void initlist(sqlist L)//初始化{ L.length=0;}sqlist insertlist(sqlist L,Elemtype i,Elemtype e)//插入{ int k; if(i<1||i>L.length+1) printf("error1"); for(k=L.length-1;k>=i-1;k--) { L.elem[k+1]=L.elem[k]; } L.elem[i-1]=e; L.length++; return L;}sqlist deletelist(sqlist L,Elemtype i)//删除{ if(i<1||i>L.length) printf("error"); for(;i<L.length-1;i++) { L.elem[i-1]=L.elem[i]; } L.length--; return L;}sqlist changelist(sqlist L,Elemtype i,Elemtype e)//修改{ if(i<1||i>L.length) printf("error"); L.elem[i-1]=e; return L;}int searchlist(sqlist L,Elemtype e)//查找{ int i; for(i=0;i<L.length&&L.elem[i]!=e;i++); if(i<L.length) return i+1; else return 0;}sqlist dellist(sqlist L)//删除相邻相同数据{ int i=0,j; while(i<L.length-2) { if(L.elem[i]==L.elem[i+1]) { for(j=i;j<L.length;j++) { L.elem[j]=L.elem[j+1]; } --L.length; } else ++i; } return L;}sqlist dellist_two(sqlist L)//删除顺序表中相同的数(可相邻也可不相邻,100以内){ int i=0,j=0; int c; for(L.length=1,i=0;i<5;i++) { scanf("%d",&c); //L.length++; L.elem[c]=1; } return L;}void list_display(sqlist L)//输出{ int j; for(j=0;j<L.length-1;j++) { printf("%d ",L.elem[j]); } printf("\n");}int main(){sqlist L;int i;int search;initlist(L);printf("input 5 numbers:\n");for(L.length=1,i=0;i<5;i++){ scanf("%d",&L.elem[i]); L.length++;}printf("在第二位置插入7\n");L=insertlist(L,2,7);list_display(L);printf("删除第二个位置的数\n");L=deletelist(L,2);list_display(L);printf("将第二个数改为8\n");L=changelist(L,2,8);list_display(L);printf("寻找1\n");search=searchlist(L,1);printf("%d\n",search);printf("删除相邻相同的数\n");L=dellist(L);list_display(L);printf("输入5个数\n");for(i=0;i<=99;i++){ L.elem[i]=0;}L=dellist_two(L);printf("删除顺序表中相同的数,100以内");for(i=1;i<=99;i++){ if(L.elem[i]==1) printf("%d ",i);}return 0;}
阅读全文
0 1
- 顺序表增删改查两种方法---C实现
- C语言实现顺序表增删查改操作
- C语言实现对顺序表的增删改查
- 顺序表的增删改查实现
- 顺序表实现增删查改
- C语言实现顺序表的增删查改以及排序
- 用C语言实现顺序表的增删查改和逆置
- C语言数据结构实现顺序表增删改差(数据结构第一次实验)
- 【C++】实现顺序表
- 【c++】实现顺序表
- C语言:静态顺序表的增删查该,数据结构
- C语言:动态顺序表的增删查改,数据结构
- 数据结构线性表的动态顺序实现增删改查
- 顺序表的实现及增删查改
- java 顺序表实现增删改查,合并,排序功能
- C++实现顺序表基本函数以及增删查改
- 数据结构顺序表的“增删改查”功能实现
- 静态顺序表的实现(增删查改排序)
- 《Effective Java》(12~16)阅读笔记
- leetcode-month1-week4
- android调试篇之eclipse 2:调试步骤-断点调试
- ViewPager实现轮播图和小圆点
- python程序的pypy加速
- 顺序表增删改查两种方法---C实现
- sizeof 的简谈
- 文本处理工具之awk
- exp+oracle +任务计划程序
- 关于Vue电商平台项目的总结
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 The Heaviest Non-decreasing Subsequence Problem 最长不下降序列
- 第十四节ArrayList 和LinkedList
- Vijos1360[八数码问题] 搜索
- Maven for mac下的安装