当前位置: 首页 > news >正文

数据结构(4)

实验步骤:
任务:要求使用自定义函数来实现
输入一段文本,统计每个字符出现的次数,按照字符出现次数从多到少,依次输出,格式如下:
字符1-个数
字符2-个数
......
解题思路:
构建结构体,然后将数据依次输入结构体中,随后进行排序输出。
算法代码如下:

#include<stdio.h>
#define MaxSize 100
typedef int DataType;
#include"SeqList.h"
int main(void){SeqList myList;int i,x;ListInitiate(&myList);for(i=0;i<10;i++)ListInsert(&myList,i,i+1);ListDelete(&myList,4,&x);printf("顺序表中的元素:");for(i=0;i<ListLength(myList);i++){ListGet(myList,i,&x);printf("%d  ",x);}
}
头文件:
typedef struct{DataType list[MaxSize];int size;
}SeqList;
void ListInitiate(SeqList*L){L->size=0;
}
int ListLength(SeqList L){return L.size;
}
int ListInsert(SeqList *L,int i,DataType x){int j;if(L->size>=MaxSize){printf("顺序表已满无法插入!\n");return 0;}else if(i<0||i>L->size){printf("参数i不合法!\n");return 0;}else{for(j=L->size;j>i;j--)L->list[j]=L->list[j-1];L->list[i]=x;L->size++;return 1;}
}
int ListDelete(SeqList*L,int i,DataType*x){int j;if(L->size<=0){printf("顺序表已空无元素可删!\n");return 0;}else if(i<0||i>L->size-1){printf("参数i不合法!\n");return 0;}else{*x=L->list[i];for(j=i+1;j<=L->size-1;j++)L->list[j-1]=L->list[j];L->size--;return 1;}
}
int ListGet(SeqList L,int i,DataType *x){if(i<0||i>L.size-1){printf("参数i不合法!\n");return 0;	} else{*x=L.list[i];return 1;}
}

任务二:
编程实现如下任务: 建立一个如表 2-1 所示的学生信息表,要求先依次输入元素,然后依次显示当前表中的元素。假设该表元素个数在最坏情况下不会超过100个。要求使用顺序表。
[程序参数设计] 因为该表元素个数在最坏情况下不会超过100个,所以定义顺序表的MaxSize为100;该设计任务要处理的元素为学生信息,从表2-1可知,每个学生信息元素包括学号、姓名、性别和年龄4个数据项。
代码如下:

#include<stdio.h>
#define MaxSize 100
typedef struct Student{long number;char name[10];char sex[3];int age;
}StudentType;
typedef StudentType DataType;
#include"SeqList.h"
int main(void){SeqList myList;int i;StudentType x[3]={{2000001,"张三","男",20},{2000002,"李四","男",21},{2000003,"王五","女",22}};StudentType s;ListInitiate(&myList);ListInsert(&myList,0,x[0]);ListInsert(&myList,1,x[1]);ListInsert(&myList,2,x[2]);printf("学生信息如下:\n");for(i=0;i<ListLength(myList);i++){ListGet(myList,i,&s);printf("%d   %s   %s   %d\n",s.number,s.name,s.sex,s.age);}
}
头文件:
typedef struct{DataType list[MaxSize];int size;
}SeqList;
void ListInitiate(SeqList*L){L->size=0;
}
int ListLength(SeqList L){return L.size;
}
int ListInsert(SeqList *L,int i,DataType x){int j;if(L->size>=MaxSize){printf("顺序表已满无法插入!\n");return 0;}else if(i<0||i>L->size){printf("参数i不合法!\n");return 0;}else{for(j=L->size;j>i;j--)L->list[j]=L->list[j-1];L->list[i]=x;L->size++;return 1;}
}
int ListDelete(SeqList*L,int i,DataType*x){int j;if(L->size<=0){printf("顺序表已空无元素可删!\n");return 0;}else if(i<0||i>L->size-1){printf("参数i不合法!\n");return 0;}else{*x=L->list[i];for(j=i+1;j<=L->size-1;j++)L->list[j-1]=L->list[j];L->size--;return 1;}
}
int ListGet(SeqList L,int i,DataType *x){if(i<0||i>L.size-1){printf("参数i不合法!\n");return 0;	} else{*x=L.list[i];return 1;}
}

任务三:
编程实现和例 2-1 相同的务,即建立一个线性表,首先依次输入元素 1,2.3,……,10,然后删除元素 5,最后依次显示当前表中的元素。要求使用单链表。 
[程序参数设计] 因为该设计任务中元素的数据类型为 int 类型,所以定义单链表的DataType 为 int。单链表的插入、删除、取元素等操作均可通过调用单链表的插入、删除、取元素等操作来实现。
代码如下:

#include<stdio.h>
#include<malloc.h>
typedef int DataType;
#include"LinList.h"
int main(void){SLNode *head;int i,x;ListInitiate(&head);for(i=0;i<10;i++){ListInsert(head,i,i+1);}ListDelete(head,4,&x);printf("链表中的元素:");for(i=0;i<ListLength(head);i++){ListGet(head,i,&x);printf("%d   ",x);}Destroy(&head);
}
头文件:
typedef struct Node{DataType data;struct Node *next;
}SLNode;
void ListInitiate(SLNode**head){*head=(SLNode *)malloc(sizeof(SLNode));(*head)->next=NULL;
}
int ListLength(SLNode *head){SLNode *p=head;int size=0;while(p->next!=NULL){p=p->next;size++;}return size;
}
int ListInsert(SLNode *head,int i,DataType x){SLNode *p,*q;int j;p=head;j=-1;while(p->next!=NULL&&j<i-1){p=p->next;j++;}if(j!=i-1){printf("插入元素位置参数错!");return 0;}q=(SLNode *)malloc(sizeof(SLNode));q->data=x;q->next=p->next;p->next=q;return 1;
}
int ListDelete(SLNode *head,int i,DataType *x){SLNode *p,*s;int j;p=head;j=-1;while(p->next!=NULL&&p->next->next!=NULL&&j<i-1){p=p->next;j++;}if(j!=i-1){printf("删除元素位置参数错!");return 0;}s=p->next;*x=s->data;p->next=p->next->next;free(s);return 1;
}
int ListGet(SLNode *head,int i,DataType *x){SLNode *p;int j;p=head;j=-1;while(p->next!=NULL&&j<i){p=p->next;j++;}if(j!=i){printf("取出元素位置参数错!");return 0;}*x=p->data;return 1;
}
void Destroy(SLNode **head){SLNode *p,*p1;p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head=NULL;
}

相关文章:

  • redis 放置序列化的对象,如果修改对象,需要修改版本号吗?
  • 数据库的基本原则
  • 【Vue级联选择器数据处理优化:解决企业类型选择与回显问题】
  • 实现添加用户和SpringBoot-实现修改和删除
  • Golang|在线排查协程泄漏
  • Go:goroutine 和通道
  • 按键精灵安卓/ios脚本辅助工具开发教程:如何把界面配置保存到服务器
  • Linux——共享内存
  • 2025年第十六届蓝桥杯省赛JavaB组真题回顾
  • 威锋VL822-Q7T10GHUB芯片适用于扩展坞显示器
  • Java异常报错:java.nio.channels.UnresolvedAddressException
  • 在 IntelliJ IDEA 中开发 Java Web 项目时,遇到包内明明存在某个类但类名仍然爆红(显示红色错误提示)
  • 广汽滴滴Robotaxi首次亮相,中国自动驾驶加速领跑新赛道
  • 明天见!奇兵到家将携“偏远服务第一网”登陆成都建博会
  • Linux常见指令介绍上(入门级)
  • ubuntu 2204 安装 vcs 2023
  • LangChain4j (3):集成 DeepSeek 大模型的Java程序
  • 质量问题频发,如何提升源头把控
  • classpath “com.android.tools.build:gradle:8.1.0“ 和 Gradle插件版本8.5 有什么关系
  • KMP算法核心笔记:前后缀本质与nextval实现
  • 印控克什米尔地区发生针对游客枪击事件,造成至少25人丧生
  • 坚守17年,这件事姚明就算赔钱也在继续做
  • 山东省淄博市委原常委宋振波被“双开”
  • 吉祥航空去年净利增超17%,海航实控人方威退出前十大股东
  • 国家疾控局局长沈洪兵:将逐步缩小国内免疫规划与国际差距
  • 市场监管部门完成全国保健食品生产企业体系检查首轮全覆盖