线性表的插入、查找与删除

来源:互联网 发布:sql sever外键约束 编辑:程序博客网 时间:2024/05/16 09:05
#include "stdio.h"#include "stdlib.h"#include "assert.h"#define MAX_LIST 100typedef int elemType;typedef int stadus; typedef struct sqlist{elemType *elem;int length;int size;}mySqlist,*mySqlistPtr;//o(1)void initList(mySqlist &Tlist){Tlist.elem = (int *)malloc(sizeof(int)*MAX_LIST);Tlist.length = 0;Tlist.size = 100;}//o(1)void destroyList(mySqlist &Tlist){free(Tlist.elem);Tlist.length = 0;Tlist.size = 0;}//非排序插入 //o(1)void insertList(mySqlist &Tlist,int elem){assert(Tlist.length<Tlist.size);if(Tlist.length>=Tlist.size){Tlist.elem = (int *)realloc(Tlist.elem,sizeof(int)*(Tlist.size+MAX_LIST));Tlist.size +=MAX_LIST;} Tlist.elem[Tlist.length] = elem;Tlist.length++;}void insertList(mySqlist &Tlist,int elem,int location){int *a,*b;assert(Tlist.length<Tlist.size);if(Tlist.length>=Tlist.size){Tlist.elem = (int *)realloc(Tlist.elem,sizeof(int)*(Tlist.size+MAX_LIST));Tlist.size +=MAX_LIST;} a = &Tlist.elem[location - 1];for(b = &Tlist.elem[Tlist.length-1];a<=b;b--)*(b+1) = *b;Tlist.elem[location-1] = elem;Tlist.length++;}void checkList(mySqlist & Tlist,int elem,int &location){location = -1;for(int i = 0;i<Tlist.length;i++){//o(length(Tlist))if(Tlist.elem[i] == elem){location = i; break;}}}//o(Tlist.length+1-location)void deleteList(mySqlist &Tlist,int location){assert(location>0&&location<Tlist.length+1);for(int i = location;i<Tlist.length+1;i++){Tlist.elem[i-1] = Tlist.elem[i];}Tlist.length-=1;}//返回一一个满足compare的元素的位序 ,没有返回-1 void listLocation(mySqlist &sqlist, int elem, int &location, bool(*compare)(int, int)) {for (int i = 0; i < sqlist.length + 1; i++) {if (compare(elem, sqlist.elem[i]) == true) {location = i+1;break;}location = -1;}}bool equal(int a, int b){return a==b;} int main(){int temp=0;int location=0; mySqlist sqlist;initList(sqlist);printf("\n输入插入元素:");while(scanf("%d",&temp)!=EOF){insertList(sqlist,temp);printf("\n输入插入元素:");}printf("输入查找位序元素值:");scanf("%d",&temp);listLocation(sqlist,temp,location,equal);printf("位序:%d\n",location);printf("按照位序插入元素(输入元素,输入位置):");while(scanf("%d %d",&temp,&location)!=EOF){insertList(sqlist,temp,location);printf("\n按照位序插入元素(输入元素,输入位置):");}printf("\n输出全表元素:");for(int i = 0;i<sqlist.length;i++){printf("%d ",sqlist.elem[i]);} printf("\n输入查找元素:");while(scanf("%d",&temp)!=EOF){checkList(sqlist,temp,location);printf("位序为:%d\n",location); printf("输入查找元素:");}printf("\n输出全表元素:");for(int i = 0;i<sqlist.length;i++){printf("%d ",sqlist.elem[i]);} printf("\n输入删除元素位序:"); while(scanf("%d",&location)!=EOF){deleteList(sqlist,location);printf("输入删除元素位序:");}printf("\n输出全表元素:");for(int i = 0;i<sqlist.length;i++){printf("%d ",sqlist.elem[i]);} destroyList(sqlist);return 0;}

原创粉丝点击