赞
踩
#define ListSize 100 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE 1 #define OVERFLOW 1 typedef int Status; typedef int DataType; typedef int *Pt; typedef struct { DataType data[ListSize]; DataType length; }SqList,*PSqList;//通过静态定义变量形式构造空的线性表L void InitList(PSqList L);//初始化一个空的线性表L //Status DestoryList(int* L);//销毁线性表L void ClearList(PSqList L);//清空线性表L Status IsEmptyList(PSqList L);//若L为空表,则返回TRUE,否则返回FALSE DataType ListLength(PSqList L);//返回L中数据元素个数 DataType GetElem(PSqList L,DataType i,Pt e);//用e返回L中第i个元素的值,操作成功返回OK,否则返回ERROR DataType LocateElem(PSqList L,DataType e);//返回e在L中的位置,有该数据元素则返回其位置,否则返回0 Status PriorElem(PSqList L,DataType e,Pt proe);//若若e是L的数据元素,且不是第一个,则用proe返回它的前驱。操作成功返回OK,否则返回-6699 Status NextElem(PSqList L,DataType e,Pt nexte);//若e是L的数据元素,且不是最后一个,则用nexte返回它的后继。操作成功返回OK,否则返回-6699 Status ListInsert(PSqList L,DataType i,DataType e);//在L第i个位置之前插入新的元素e,L长度加1,成功操作返回OK,否则返回ERROR DataType ListDelete(PSqList L,DataType i,Pt e);//删除L的第i个数据元素,并用e返回其值,L长度减1,操作成功返回删除的值,否则返回ERROR Status ListTraverse(PSqList L);//依次对L每个数据元素调用函数,成功遍历返回OK,否则返回ERROR
# include "SqList.h" # include <stdio.h> void InitList(PSqList L)//构造一个空的线性表L { L->length=0; } void ClearList(PSqList L)//清空线性表L { L->length=0; printf("\n已执行清空线性表L!\n"); } Status IsEmptyList(PSqList L)//若L为空表,则返回TRUE,否则返回FALSE { if(L->length==0) { return TRUE; } else { return FALSE; } } DataType ListLength(PSqList L)//返回L中数据元素个数 { return L->length; } DataType GetElem(PSqList L,DataType i,Pt e)//用e返回L中第i个元素的值,操作成功返回其值,否则返回-6699 { if(L->length==0||i>L->length) { return -6699; } else { return *e=L->data[i-1]; } } DataType LocateElem(PSqList L,DataType e)//返回e在L中的位置,有该数据元素则返回其位置,否则返回0 { DataType i; for(i=0;i<L->length;i++) { if(L->data[i]==e) { return i+1; } } return 0; } Status PriorElem(PSqList L,DataType e,Pt proe)//若e是L的数据元素,且不是第一个,则用proe返回它的前驱。操作成功返回OK,否则返回-6699 { DataType i; i=LocateElem(L,e); if(i>=2) { *proe=L->data[i-1-1]; return OK; } else { if(i==0) { *proe=-6699; printf("\n该元素:%d不在L中!无法找其前驱!\n",e); return -6699; } else { if(i==1) { *proe=-6699; printf("\n该元素是第一个元素,无前驱!\n"); return -6699; } } } return -6699; } Status NextElem(PSqList L,DataType e,Pt nexte)//若e是L的数据元素,且不是最后一个,则用nexte返回它的后继。操作成功返回OK,否则返回-6699 { DataType i; i=LocateElem(L,e); if(i>=1&&i<=L->length-1) { *nexte=L->data[i-1+1]; return OK; } else { if(i==0) { *nexte=-6699; printf("\n该元素:%d不在L中!无法找其后继!\n",e); return -6699; } else { if(i==L->length) { *nexte=-6699; printf("\n该元素是最后一个元素,无后继!\n"); return -6699; } } } return -66999; } Status ListInsert(PSqList L,DataType i,DataType e)//在L第i个位置之前插入新的元素e,L长度加1,成功操作返回OK,否则返回ERROR { if(i<1||i>L->length+1) { printf("\n插入位置:%d不合法!\n",i); return ERROR; } else { if(ListLength(L)>=ListSize) { printf("\n该L表已满!\n"); return ERROR; } else { DataType k; for(k=L->length-1;k>=i-1;k--) { L->data[k+1]=L->data[k]; } L->data[i-1]=e; L->length++; return OK; } } } DataType ListDelete(PSqList L,DataType i,Pt e)//删除L的第i个数据元素,并用e返回其值,L长度减1,操作成功返回删除的值,否则返回ERROR { if(ListLength(L)==0) { printf("\n表为空,不能执行删除元素!\n"); return ERROR; } else { if(i>ListLength(L)) { printf("删除位置超过表长,非法删除!\n\n"); return ERROR; } else { *e=L->data[i-1]; DataType k; for(k=i;k<L->length;k++) { L->data[k-1]=L->data[k]; } L->length--; return *e; } } } Status ListTraverse(PSqList L)//依次对L每个数据元素调用函数,成功遍历返回OK,否则返回ERROR { DataType k; if(IsEmptyList(L)==1) { printf("\n遍历失败!表L为空!\n"); return ERROR; } else { for(k=0;k<L->length;k++) { if(k==0) { printf("开始遍历L:%d",L->data[k]); } else { printf(" %d",L->data[k]); } } printf("\n"); return OK; } }
#include <stdio.h> #include <stdlib.h> #include "SqList.h" #include <windows.h> /* 线性表——顺序表【自编代码】 */ int main() { DataType ef=-66999,n0,m,v,co=1; SqList L; printf("<————线性表的顺序存储【静态法】————>\n\n\n"); printf("——————初始化线性表静态法——————\n"); InitList(&L);//构造一个空的线性表L //Status DestoryList(int* L);//销毁线性表L for(m=0;m<=100;m=m+10) { printf("\r"); for(v=0;v<=co;v++) { printf("---"); Sleep(10); } co++; printf(">%d%%\r",m); printf("\r"); Sleep(80); } printf("\n——————初始化线性表已完成——————\n"); printf("\n——————初始化依次插入元素——————\n"); DataType i; printf("请输入要插入的整型元素(以f结束):"); for(i=0;i<ListSize;i++) { DataType n,k; k=scanf("%d",&n); if(k==0) { break; } else { ListInsert(&L,i+1,n); } } printf("——————初始化依次插入完成——————\n"); printf("\n——————开始遍历检查初始化——————\n"); ListTraverse(&L); printf("——————遍历检查初始化完成——————\n"); printf("\n——————开始检查表中元素数——————"); printf("\n当前表L中元素个数为:%d\n",ListLength(&L));//返回L中数据元素个数 printf("——————检查表中元素数完成——————\n"); getchar(); printf("\n输入要查找的位置:"); scanf("%d",&i); GetElem(&L,i,&ef);//用e返回L中第i个元素的值,操作成功返回OK,否则返回ERROR printf("\n当前表L中第%d个元素为:%d\n",i,ef); printf("\n输入要返回其前驱的元素值:"); scanf("%d",&i); printf("\n%d在表L中位置是:%d\n",i,LocateElem(&L,i));//返回e在L中的位置,有该数据元素则返回其位置,否则返回0 PriorElem(&L,i,&ef);//若若e是L的数据元素,且不是第一个,则用proe返回它的前驱。操作成功返回OK,否则返回-6699 printf("\n%d在表L中前驱是:%d\n",i,ef); printf("\n输入要返回其后继的元素值:"); scanf("%d",&i); printf("\n%d在表L中位置是:%d\n",i,LocateElem(&L,i));//返回e在L中的位置,有该数据元素则返回其位置,否则返回0 NextElem(&L,i,&ef);//若e是L的数据元素,且不是最后一个,则用nexte返回它的后继。操作成功返回OK,否则返回-6699 if(ef!=-6699) { printf("\n%d在表L中后继是:%d\n",i,ef); } printf("\n输入要插入的位置和插入值:"); scanf("%d %d",&i,&n0); if(ListInsert(&L,i,n0)==1)//在L第i个位置之前插入新的元素e,L长度加1,成功操作返回OK,否则返回ERROR { printf("已成功插入!\n"); } else { printf("插入失败!可能是位置违规或表已满!\n"); } printf("\n——————开始遍历检查表数据——————\n"); ListTraverse(&L); printf("——————遍历检查初始化完成——————\n"); printf("\n当前表L中元素个数为:%d\n",ListLength(&L));//返回L中数据元素个数 printf("输入要删除的位置:"); scanf("%d",&i); if(ListDelete(&L,i,&ef))//删除L的第i个数据元素,并用e返回其值,L长度减1,操作成功返回删除的值,否则返回ERROR { printf("已删除第%d个位置元素!\n",i); } ListTraverse(&L); printf("\n当前表L中元素个数为:%d\n",ListLength(&L));//返回L中数据元素个数 ClearList(&L);//清空线性表L ListTraverse(&L); printf("\n当前表L中元素个数为:%d\n",ListLength(&L));//返回L中数据元素个数 system("pause"); return 0; }
------------------------------------------------------第一次发文章有点激动啊!-----------------------------------------------------
-----------------------------------------------------【数据结构代码自编练习】------------------------------------------------------
----------------------------------------------------------------【TDTX】-----------------------------------------------------------------
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。