顺序表
来源:互联网 发布:淘宝网ipad保护套 编辑:程序博客网 时间:2024/06/07 22:24
数据结构顺序表
//consts.h
#include<string.h>#include<malloc.h>#include<stdlib.h>#include<stdio.h>#include<limits.h>#include<io.h>#include<math.h>#include<process.h>#define TRUR 1#define FALSE 0#define OK 1#define ERROR -1#define INFEASIBLE -1
//seqlist.h
#ifndef MY_H_FILE #define MY_H_FILE #include"consts.h"#endif #define MAXSIZE 100typedef int DataType;typedef struct{ DataType data[MAXSIZE]; int last;}SeqList;
//seqlist.cpp
#ifndef MY_LCPP_FILE #define MY_LCPP_FILE #include"seqlist.h"#endif //置空表void SeqListNull(SeqList *l){ l=(SeqList*)malloc(sizeof(SeqList)); l->last=-1;}//求表长int SeqLLength(SeqList *l){ return l->last+1;}//取节点DataType SeqGet(SeqList *l,int i){ if(i<1 || i>l->last+1) { printf("\ti的位置不正确\n"); return ERROR; } return l->data[i-1];}//定位int SeqLocate(SeqList *l,DataType x){ int i; for(i=0;i<=l->last;i++) { if(l->data[i]==x) return (i+1); } return 0;}//插入操作int SeqInsert(SeqList *l,int i,DataType x){ int j; if(i<1 || i>l->last+2) { printf("位置错"); return ERROR; } if(l->last==MAXSIZE-1) { printf("表满溢出"); return ERROR; } for(j=l->last;j>=i-1;j--) { l->data[j+1]=l->data[j]; } l->data[i-1]=x; l->last++; return OK;}//删除操作int SeqDelete(SeqList *l,int i){ int j; if(l->last==-1) { printf("表空"); return -1; } if(i<1 || i>l->last+1) { printf("位置错"); return -1; } for(j=i;j<=l->last;j++) { l->data[j-1]=l->data[j]; } l->last--; return 1;}//建立顺序表void SeqLCreate(SeqList *l){ int i,n; printf("\t请输入表的长度:"); scanf("%d",&n); l->last=n-1; printf("\t依次输入表中的数据元素:\n"); for(i=0;i<n;i++) { printf("\t第%d个元素是:",i+1); scanf("%d",&l->data[i]); }}//输出顺序表void SeqLPrint(SeqList *l){ int j; if(l->last<0) { printf("\t表空\n"); exit(0); } else { printf("\t表的数据如下:\n"); for(j=0;j<=l->last;j++) { printf(" %5d",l->data[j]); } printf("\b\n"); }}int main(int argc,char *argv[]){ DataType y; SeqList *a,x; int m,t,read=0; a=&x; do { puts(" 关于顺序表的操作\n"); puts(" =======================\n"); puts(" 1----置空表"); puts(" 2----建表"); puts(" 3----求表长"); puts(" 4----取节点"); puts(" 5----定位"); puts(" 6----插入"); puts(" 7----删除"); puts(" 8----输出"); puts(" 9----退出"); printf(" 请选择代号:"); scanf("%d",&read); switch(read) { case 1:SeqListNull(a);break; case 2:SeqLCreate(a);break; case 3:printf("\t表的长度是:%d\n",SeqLLength(a));break; case 4:printf("\t取节点的位置是:"); scanf("%d",&m); y=SeqGet(a,m); if(y) printf("\t第%d个节点的位置是%d\n",m,y);break; case 5:printf("\t定位的数据元素是:"); scanf("%d",&y); t=SeqLocate(a,y); if(t) printf("\t定位的数据元素位置是:%d\n",t);break; case 6: printf("\t插入数据元素是:"); scanf("%d",&y); printf("\t插入位置是:"); scanf("%d",&m); t=SeqInsert(a,m,y); if(t) printf("\t插入后表的数据元素是\n"); SeqLPrint(a);break; case 7: printf("\t删除的位置是:"); scanf("%d",&m); t=SeqDelete(a,m); if(t) printf("\t删除后的数据元素是:\n"); SeqLPrint(a);break; case 8: SeqLPrint(a);break; case 0: read=0; } }while(read!=0); return 0;}