C语言项目实现顺序表
#include <stdio.h> #include <stdlib.h> #include "test_顺序表声明.h" /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { SeqList L1; ElemType x1; int i,num=1,num1,num2,num3,num4,num5; init_SeqList(&L1);//预先清空顺序表,准备开始存放数据 printf("顺序表已初始化,可以直接操作!\n"); printf("0:表示退出\n"); printf("1:表示录入元素\n"); printf("2:插入元素\n"); printf("3:删除元素\n"); printf("4:查找表中元素\n"); printf("5:取某个元素\n"); printf("6:判断顺序表是否为空\n"); printf("7:求顺序表的长度\n"); printf("8:清空顺序表\n"); while(num!=0) { printf("\n请输入指令:"); scanf("%d",&num); switch(num) { case 0:exit(0); break; case 1:printf("请输入你要输入元素的个数:\n"); scanf("%d",&L1.length); printf("请开始输入%d个元素\n",L1.length); for(i=1;i<=L1.length;i++) { scanf("%d",&L1.elem[i]); } break; case 2:printf("请输入要插入的元素:\n"); scanf("%d",&num1); printf("请输入你要插入几号位置:\n"); scanf("%d",&num2); num1=Inser_SeqList(&L1,num2,num1); if(num1==1) printf("插入成功!\n"); else printf("插入失败!\n"); printList(L1); break; case 3:printf("请输入删除元素的位置:\n"); scanf("%d",&num3); num3=Delete_SeqList(&L1,num3); if(num3==1) printf("删除成功!\n"); else printf("删除失败!\n"); printList(L1); break; case 4:printf("请输入你要查找的元素:\n"); scanf("%d",&x1); num=Location_SeqList(L1,x1); if(num==-1) printf("此位置没有元素!\n"); else printf("此元素位置在:%d\n",num); break; case 5:printf("请输入要取元素的位置:\n"); scanf("%d",&num5); num=Location_SeqList1(L1,num5); if(num==-1) printf("此位置没有元素!\n"); else printf("第%d号位置为:%d",num5,num); break; case 6:num=ListEmpty(&L1); printf("数据表ture表示空,false表示非空\n"); if(num==-1) { printf("判断结果为:%c%c%c%c\n",116,117,114,101); } else if(num==1) { printf("判断结果为:%c%c%c%c%c\n",102,97,108,115,101); } else{ printf("程序错误!"); } break; case 7:num=LongList(&L1); if(num==-1) printf("长度为:0"); else printf("长度为:%d",num); break; case 8:ClearList(&L1); printf("顺序表已清空!\n"); break; default:printf("指令错误!请重输!\n"); break; } printList(L1); } return 0; }
项目的main函数,也是顺序表项目的启动器
#include <stdio.h> #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType elem[MAXSIZE]; int length; }SeqList;//定义一个顺序表 //初始化顺序表 void init_SeqList(SeqList *L) { L->length=0;//长度为0,顺序表自然为空 } //插入函数 int Inser_SeqList(SeqList *L,int i,ElemType x) { int j; if(L->length==MAXSIZE-1)//表满 { printf("表满!"); return -1; } if(i<1||i>L->length+1)//0号位置不放数据,这句话的意思 { printf("位置不对\n"); return -1; } //排除了所有不能插入的情况后,可以直接开始插入 for(j=L->length;j>=i;j--) L->elem[j+1]=L->elem[j];//逐个移动位置,直到把待插入的位置空出来 L->elem[i]=x; //待插入的位置空余后,把待插入的数据赋值给那个位置 L->length++; return 1; //1表示成功,-1表示不成功 } //删除函数 待删除的数据表,待删除的位置 int Delete_SeqList(SeqList *L,int i) { int j; if(i<1||i>L->length) { printf("不存在%d位置,这个元素\n",i); return -1; } for(j=i;j<=L->length-1;j++) { L->elem[j]=L->elem[j+1];//直接向删除位置进行数据移动,把删除位置的数据覆盖掉,完成删除(顺序表) } L->length--;//长度收缩,完全丢掉 return 1; } //查找函数 int Location_SeqList(SeqList L,ElemType x) { int i=1; //第一个条件跳出,表长不够,或者说查找数据不在此内 //第二个条件跳出,数据被找到了 while(i<L.length&&L.elem[i]!=x) i++; if(i>L.length) return -1; else return i; } int Location_SeqList1(SeqList L,int i) { //第一个条件跳出,表长不够,或者说查找数据不在此内 //第二个条件跳出,数据被找到了 if(i<L.length&&i>0)//判断位置的合法性 return L.elem[i]; else return -1; } //判断线性表是否为空 int ListEmpty(SeqList *L) { if(L->length!=0) return 1; else return -1; } //输出表的长度 int LongList(SeqList *L) { if(L->length!=0) return L->length; else return -1; } //清空表 int ClearList(SeqList *L) { L->length=0;//长度为0,顺序表自然为空 return 1; } void printList(SeqList L) { int i; for(i=1;i<=L.length;i++) { printf("%-3d",L.elem[i]); } }
顺序表所用到的函数,都写在了"test.函数"之中
//项目函数声明
#define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType elem[MAXSIZE]; int length; }SeqList;//定义一个顺序表 SeqList *L; void init_SeqList(SeqList *L); int Inser_SeqList(SeqList *L,int i,ElemType x); int Delete_SeqList(SeqList *L,int i); int Location_SeqList(SeqList L,ElemType x); int Location_SeqList1(SeqList L,int i); int ListEmpty(SeqList *L); int LongList(SeqList *L); int ClearList(SeqList *L); void printList(SeqList L);
项目的函数声明,项目也必须要这个声明,一般不声明编译器会自己改动函数的返回值为int,但是我们的输入值可能为:float,double,char等等
此项目都是用的int,可能不用声明结果不会错,但是现实中大部分情况都是有问题的。