赞
踩
顺序表中基本的输入、输出之查找第i个数据元素的值:
代码:
- #include <stdio.h>
- #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 <stdio.h>
- #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;i<L.length;i++){
- //空间变小,元素需要往前移位
- L.data[i-1]=L.data[i];
- }
- L.length--;
- printf("要删除的元素是%d\n",number);
-
- }
-
- //查找(获取)元素
- void GetData(SeqList L){
- int number;
- printf("\n");
- printf("请输入要查找的元素:");
- scanf("%d",&number);
- for(int i=0;i<=L.length;i++){
- if(L.data[i]==number){
- printf("查找成功!值为%d,位于当前顺序表的第 %d 个位置\n",number,i+1);
- break;
- }
- }
- }
-
- //插入元素
- void insertList(SeqList &L){
- printf("\n请输入插入位置的元素:");
- int index;
- scanf("%d",&index);
- if(index<1 || index>L.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];
- }
- //插入元素num
- L.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 <stdio.h>
- #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号。
需要完成的功能如下:
改进中......
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
-
- typedef struct Student{
- char name[20]; //姓名
- char telephone[20]; //电话号码
- int qq[20]; //QQ号
- struct Student *next;
- }Node;
-
- Node *head;//头指针
-
- //初始化系统界面
- void screnn(){
- printf("==========欢迎来到个人通讯录管理系统!==========\n");
- printf(" 1.输入信息 2.显示信息\n");
- printf(" 3.查找信息 4.删除信息\n");
- printf(" 5.修改信息 6.添加信息\n");
- printf(" 7.保存通讯录 8.显示系统界面\n");
- printf(" 9.清屏cls\n");
- printf("\n===============输入0退出程序===============\n");
- }
-
- // 1 输入信息
- void enter()
- {
- int ans; // 判断是否继续输入
- Node *p1, *p2;
- p1 =new Node; // 申请内存来用
- if (p1 != NULL)
- {
- printf("========输入数据========\n");
- head = p1;
- while (1)
- {
- printf("姓名:");
- scanf("%s", &p1->name);
- printf("电话号码:");
- scanf("%s", &p1->telephone);
- printf("QQ号码:");
- scanf("%s", &p1->qq);
- printf("\n\n");
- p2 = p1;
- // 申请下一个要用的空间
- p1 = new Node;
- if (p1 != NULL)
- p2->next = p1;
- //用户选择
- printf("请选择是否继续输入:1.继续 2.退出\n请选择:");
- scanf("%d", &ans);
- if (ans == 1)
- continue;
- else
- { //退出
- printf("\n========输入完成========\n\n");
- p2->next = NULL;
- //将申请的的无用内存释放
- delete(p1);
- break;
- }
- }
- }
- }
-
- int main(){
- //显示通讯录系统界面
- screnn();
-
- int numbers;
- while(1){
- printf("请输入你的选择(1~9):");
- scanf("%d",&numbers);
- printf("\n");
- if(numbers<0 || numbers>9){
- printf("输入有误!");
- continue;
- }
- switch(numbers){
- case 0:
- printf("\n==========欢迎你再次使用个人通讯录管理系统!==========\n");
- //退出系统
- exit(1);
- break;
-
- case 1:
- //1输入信息
- enter();
- break;
-
- case 2:
- //2显示信息
- display(head);
- break;
-
- case 3:
- //3查找信息
- search(head);
- break;
-
- case 4:
- //4删除信息
- deleted();
- break;
-
- case 5:
- //5修改信息
- update(head);
- break;
-
- case 6:
- //6添加信息
- insert();
- break;
-
- case 7:
- //7保存通讯录
- save(head);
- break;
-
- case 8:
- //显示通讯录系统界面
- screnn();
- break;
-
- case 9:
- //8清屏
- cls();
- break;
-
- default:
- printf("输入有误!请重新输入!");
- break;
- }
- }
- return 0;
- }
有问题可以随时联系小编!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。