顺序表有关操作的练习

来源:互联网 发布:stem编程 编辑:程序博客网 时间:2024/05/18 00:05

代码

#include<stdio.h>#include<stdlib.h>#define MAXLEN 100//顺序表最大长度 typedef int ElementType;typedef struct{ElementType ar[MAXLEN];int len;//线性表的长度 }SqList;//结构体类型名称 //!!!这里, 线性表从ar[1] 开始存储,直到ar[MAXLEN-1];//0<=len<=MAXLEN-1记录最后一个元素的位置 //从位置i插入元素, 1<=i<=len; //插入前位置i,i+1,...,len的元素依次后移一位; int  InsList(SqList *l,int i,ElementType x) {if(i<1 | i>l->len){printf("插入的位置不合法!");exit(0);} if(l->len==MAXLEN-1){printf("线性表已达到最大长度!");exit(0);} int j;for(j=l->len;j>=i;j--){l->ar[j+1]=l->ar[j];}l->ar[i]=x;l->len++;//表长+1 return 1;}//删除位置i的元素,1<=i<=n;//删除前位置i+1,...,len的元素以此前移一位; int DelList(SqList *l,int i,ElementType *x){if(i<1|i>l->len){printf("删除的位置不合法!");return 0;} if(l->len==0){printf("线性表已空!");return 0;} int j;*x=l->ar[i];for(j=i;j<l->len;j++){l->ar[j]=l->ar[j+1];}l->len--;return 1;}int SearchList(SqList *l, ElementType x){int j=1;for(j;j<=l->len;j++){if(l->ar[j]==x)return j;}return -1;/**while((j<=l->len)&&(x!=l->ar[j]))j++;if(j<=l->len)return j;else return -1;**/} //输出线性表 void displayList(SqList *l){int j=1;while(j<=l->len){printf("%4d",l->ar[j++]);}printf("\n");}int main(){SqList *l1=(SqList*)malloc(sizeof(SqList));SqList l2;while(1){printf("===============l1================\n");printf("输入线性表的长度(不小于1的整数):\n");scanf("%d",&l1->len);if(l1->len<1)printf("数值不合理!请重来!\n");else break; } int i=1;printf("输入线性表各元素值:\n");while (i <= l1->len)scanf("%d",&l1->ar[i++]);printf("输入要插入的位置和数值:\n");{int u,v;scanf("%d%d",&u,&v);InsList(l1,u,v);} //{}目的:执行后释放掉u,v以便于以后使用 ;其实也没必要... printf("输出插入后的线性表: \n");displayList(l1);l2=*l1; //结构体整体赋值 printf("===============l2=l1================\n");displayList(&l2);printf("输入需要查找的元素值: \n");int u,v;scanf("%d",&u);if(-1!=(v=SearchList(&l2,u)))printf("所找的元素最先出现在位置%d.\n",v);int w;ElementType *x=(ElementType*)malloc(sizeof(ElementType));//不分配空间会出现Segmentation fault. while(1){printf("输入需要删除的元素的位置: \n");scanf("%d",&w);if(w<1|w>l2.len) printf("位置不合理!请重来!\n");else break;}if(DelList(&l2,w,x))printf("删除的元素是: %d\n",*x);printf("输出l1:\n");displayList(l1);printf("输出l2:\n");displayList(&l2); return 0;}

运行结果