线性表的输入、输出、删除和修改之个人通讯录管理系统
创始人
2025-05-30 03:16:57
0

线性表的基本操作:

小牛试刀:

        顺序表中基本的输入、输出之查找第i个数据元素的值:

代码:

#include  
#define LISTSIZE 100
typedef int DateType; 
typedef struct {DateType data[LISTSIZE];int length;
}SqlList;void input(SqlList &L, int n)
{printf("请输入元素:\n");for (int i = 1; i <= n; i++){scanf("%d", &L.data[i-1]);}L.length=n;printf("\n");
}
void output(SqlList &L, int n)
{for (int i = 1; i <= n; i++){printf("%-3d", L.data[i-1]);}printf("\n");
}
void GetData(SqlList L, int i, int &a)
{a = L.data[i - 1];
}
int main()
{int a,num;SqlList L;printf("请输入插入的元素:\n");input(L, 5);printf("输出的元素是:\n");output(L, 5);printf("\n请输入需要查找的元素位置:");scanf("%d",&num);GetData(L, num, a);printf("\n第 %d 个位置元素的值是:%d", num, a);return 0;
}

效果图:

 

基础篇:

        完成顺序表的基本操作(如输入、输出、插入操作、删除操作、查找操作等)

代码:

#include  
#define ListSize 100
typedef int DateType; // 把int类型定义成新的类型
typedef struct {DateType data[ListSize];int length;
}SeqList;//输入函数
void input(SeqList &L) {printf("请输入数据后按回车键确认,若想结束输入请按“#”\n");printf("***********************************\n");char num[20];int sum = 0,i,b,j=0;printf("请输入元素: ");gets(num);if(num[0] == '#') break;L.length++;}
}//删除元素
void deleteData(SeqList &L){printf("\n请输入删除元素的位置:");int position;scanf("%d",&position);if(position<1 || position>L.length){printf("删除位置不合法!\n");return;}int number;number=L.data[position-1];for(int i=position;iL.length+1){printf("插入位置不合法!");return;}if(L.length>=ListSize){printf("线性表已满,无法插入元素!");return;}int num;printf("\n请输入插入的元素:");scanf("%d",&num);//从最后一个元素往后移for(int k=L.length-1;k>=index-1;k--){L.data[k+1]=L.data[k];}//插入元素numL.data[index-1]=num;L.length++;
}// 输出函数
void output(SeqList L){printf("\n");printf("****遍历顺序表中的元素***\n");for(int i = 1; i<= L.length; i++) {printf("第%d个元素的值为 %d\n",i,L.data[i-1]);}
}int main(){SeqList L;L.length=0;input(L);output(L);GetData(L);insertList(L);printf("\n插入后的线性表是:");output(L);deleteData(L);printf("\n删除后的线性表是:");output(L);return 0;
}

效果图:

加强篇:

        已知线性表La和Lb的元素按值非递减排列,归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。(注:需要使用顺序表和链表分别完成)

代码:

#include 
#define ListSize 100
typedef int DataType;
typedef struct{DataType data[ListSize];int length;
}SeqList;typedef struct Node{DataType data;struct Node *next;
}Node,*LinkList;//顺序表输入
void input_Seqlist(SeqList &L){printf("请输入数据总量:");int num;scanf("%d",&num);printf("请输入数据:");int number;for(int i=1;i<=num;i++){scanf("%d",&number);L.data[i-1]=number;L.length++;}
}//顺序表输出
void output_Seqlist(SeqList L){printf("\n线性表中数据是:\n"); for(int i=1;i<=L.length;i++){printf("%d)>、%d\t\t",i,L.data[i-1]);}printf("\n");
}//顺序表的合并
void mergeList1(SeqList La,SeqList Lb,SeqList &Lc){int i=0,j=0,k=0;while(i<=La.length-1 && j<=Lb.length-1){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.length-1){Lc.data[k]=La.data[i];i++;k++;}while(j<=Lb.length-1){Lc.data[k]=La.data[j];j++;k++;}Lc.length=La.length+Lb.length;
}//使用链表输入
void input_Link(LinkList &L){int nums,i=1;printf("请输入数据总量:");int num;scanf("%d",&num);L=new Node;Node *s,*r=L;printf("请输入数据元素:");while(i<=num){scanf("%d",&nums);s=new Node;s->data=nums;r->next=s;r=s;i++;}r->next=NULL;
}//使用链表输出
void ouput_Link(LinkList L){int i=1;Node *p;p=L->next;while(p!=NULL){printf("%d)--->%d\t\t",i,p->data);p=p->next;i++;}printf("\n");
}//使用链表合并
void mergeList2(LinkList LA,LinkList LB,LinkList &LC){Node *pa,*pb,*pc;pa=LA->next;pb=LB->next;LC=LA;pc=LC;while(pa!=NULL && pb!=NULL){if(pa->data<=pb->data){pc->next=pa;pc=pa;pa=pa->next;}else{pc->next=pb;pc=pb;pb=pb->next;}}if(pa){pc->next=pa;}else{pc->next=pb;}delete LB;
}//主函数
int main(){//初始化SeqList La,Lb,Lc;La.length=0;Lb.length=0;Lc.length=0;LinkList LA,LB,LC;LA=NULL;LB=NULL;LC=NULL;printf("1、使用链表合并\n2、使用顺序表合并\n3、退出程序\n");int number;scanf("%d",&number);if(number==1){//1、链表合并printf("\n请输入第一个升序排列的链表ListA\n");input_Link(LA);ouput_Link(LA);printf("\n请输入第二个升序排列的链表ListB\n");input_Link(LB);ouput_Link(LB);mergeList2(LA,LB,LC);printf("\n使用链表合并成功!\n");ouput_Link(LC);}else if(number==2){//2、顺序表合并printf("\n请输入第一个升序排列的线性表ListA\n");input_Seqlist(La);output_Seqlist(La);printf("\n请输入第二个升序排列的线性表ListB\n");input_Seqlist(Lb);output_Seqlist(Lb);mergeList1(La,Lb,Lc);printf("\n使用线性表合并成功!\n");output_Seqlist(Lc);printf("SeqListC线性表的长度是:%d",Lc.length);}else{printf("退出程序!!!\n");}return 0;
}

效果图:

提高篇:

        为方便管理个人通讯录系统,编写一个简单的通讯录管理系统,系统记录必须有姓名、电话号码、QQ号

需要完成的功能如下:

1、输入信息:调用此函数用以输入数据到内存中,此过程包括建立相应的链表或相应的数组,便于读取

2、显示信息:用以显示输入的数据

3、查找:以姓名作为关键字查找要找的信息

4、删除信息:用以删除选定的输入信息(姓名作为关键字)

5、修改信息:用以修改选定的输入信息(姓名作为关键字)

6、打开通讯录:存储从文件中读取的字符

7、添加信息:用尾插法以添加信息

8、保存:调用此函数将内存中的数据保存至磁盘中

9、清屏:执行cls命令

 正在开发中......

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...