1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C语言实现顺序表基本操作

C语言实现顺序表基本操作

时间:2018-11-18 14:10:17

相关推荐

C语言实现顺序表基本操作

C语言实现顺序表的基本操作,包括增删查操作以及顺序表的合并

SequentialList.h

#include <stdio.h>#include <stdlib.h>#define MAXSIZE 30typedef int DataType;//顺序表格式定义typedef struct{DataType Data[MAXSIZE]; //数据域,存放数据int last; //记录最后顺序表一个元素下标,空表为-1}SeqList;//定义三个顺序表LA,LB,LCSeqList LA,LB,LC;//判空int IsEmpty(SeqList L);//判满int IsFull(SeqList L);//初始化顺序表int InitSeqList(SeqList* L);//在下标i处插入数据int InsList(SeqList* L,int i,int e);//递增按序插入数据int InsertList(SeqList* L,int e);//删除下标为i的元素int DelList(SeqList* L,int i);//删除数据eint DeleteList(SeqList* L,int e);//查找并返回下标为i的元素int GetData(SeqList L,int i);//查找变量e并返回下标int Locate(SeqList L,int e);//显示L所有数据int Show(SeqList L);//合并有序顺序表LA,LBint MergeList(SeqList* LA,SeqList* LB,SeqList* LC);//状态判断函数,判断并输出操作的运行状态int State(int i);//对顺序表L进行操作int Operation(SeqList* L);//主界面int MainMenu();

SequentialList.c

#include <stdio.h>#include <stdlib.h>#include "SequentialList.h"//初始化顺序表int InitSeqList(SeqList* L){//将顺序表last值赋为-1,将顺序表置为空表L->last = -1;return 0;}//在下标i处插入数据int InsList(SeqList* L,int i,int e){int j;if(IsFull(*L))return -1;//表已满,无法插入if((i < 0)||(i > L->last + 1))return 0; //插入位置i不合法if(i == L->last + 1){L->Data[i] = e;L->last++;return 1; //插入成功返回1}else{for(j = L->last;j >= i; j--)L->Data[j+1] = L->Data[j];L->Data[i] = e;L->last++;return 1; //插入成功返回1}}//按递增顺序插入数据eint InsertList(SeqList* L,int e){int i;if(IsEmpty(*L)){L->Data[0] = e;L->last++;return 1;//插入成功返回1}else{for(i = 0;i <= L->last; i++ ){if(L->Data[i] > e)break;}return InsList(L,i,e);//在下标i处插入数据并返回其返回值}}//删除下标为i的元素int DelList(SeqList* L,int i){int j;if((i < 0)||(i > L->last))return 0; //删除位置不合法返回0if(i < L->last)for(j = i;j < L->last; j++ )L->Data[j] = L->Data[j+1];L->last--;return 1;//删除成功返回1}//删除数据eint DeleteList(SeqList* L,int e){int i = Locate(*L,e);if(i >= 0)return DelList(L,i);return -2;}//返回下标为i的数据int GetData(SeqList L,int i){if((i < 0)||(i > L.last))return 0; //位置不合法返回0return L.Data[i]; //操作成功返回1}//查找e返回下标int Locate(SeqList L,int e){int i = 0;while((i <= L.last)&&(L.Data[i] != e))i++;if(i <= L.last)return i; //找到位置则1return -1; //未找到返回-2}//判空int IsEmpty(SeqList L){if(L.last == -1)return 1; //表为空返回1return 0;}//判满int IsFull(SeqList L){if(L.last == MAXSIZE - 1)return 1; //表已满返回1return 0;}//显示顺序表中所有元素int Show(SeqList L){int i;for(i = 0;i <= L.last; i++)printf("\t%d. %d\n",i,L.Data[i]);return 0;}//状态判断函数,判断并输出操作的运行状态int State(int i){if(i == -1)printf("\t顺序表已满\n");else if(i == 0)printf("\t输入位置不合法\n");else if(i == -2)printf("\t在顺序表中未找到该数据\n");else if(i == -3)printf("\t顺序表为空\n");elseprintf("\t操作成功\n");return 0;}//对顺序表进行操作int Operation(SeqList* L){int i,e,k,m;//i操作数,e增删查的数据,k要操作的位置while(1){system("cls");printf("\t1.按序插入数据e\n");printf("\t2.删除第k个数据\n");printf("\t3.删除数据e\n");printf("\t4.查找数据e\n");printf("\t5.显示所有数据\n");printf("\t0.返回主界面\n");scanf("%d",&i);switch(i){case 1:printf("请输入要插入的数据");scanf("%d",&e);State(InsertList(L,e));system("pause");break;case 2:printf("请输入要删除数据的位置");scanf("%d",&k);State(DelList(L,k-1));system("pause");break;case 3:printf("请输入要删除的数据");scanf("%d",&e);State(DeleteList(L,e));system("pause");break;case 4:printf("请输入要查找的数据");scanf("%d",&e);m =Locate(*L,e);if(m >= 0)printf("\n%d的下标为%d\n",e,m);system("pause");break;case 5:Show(*L);system("pause");break;case 0:return 0;break;default:break;}}}//合并有序顺序表LA,LBint MergeList(SeqList* LA,SeqList* LB,SeqList* LC){int i,j,k;i = j = k = 0;while((i <= LA->last)&&(j <= LB->last))if(LA->Data[i] < LB->Data[j]){LC->Data[k] = LA->Data[i];i++;k++;}else{LC->Data[k] = LB->Data[j];j++;k++;}while(i <= LA->last){LC->Data[k] = LA->Data[i];i++;k++;}while(j <= LB->last){LC->Data[k] = LB->Data[j];j++;k++;}LC->last = LA->last + LB->last + 1;return 0;}//主界面int MainMenu(){int i;printf("\t1.对顺序表LA进行操作\n");printf("\t2.对顺序表LB进行操作\n");printf("\t3.合并顺序表LA和LB\n");printf("\t4.查看LC\n");printf("\t0.退出系统\n");scanf("%d",&i);switch(i){case 1:Operation(&LA);break;case 2:Operation(&LB);break;case 3:MergeList(&LA,&LB,&LC);break;case 4:Show(LC);break;case 0:exit(0);break;default:break;}system("pause");return 0;}

main.c

#include <stdio.h>#include <stdlib.h>#include "SequentialList.h"int main(){InitSeqList(&LA);InitSeqList(&LB);InitSeqList(&LC);while(1){system("cls");MainMenu();}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。