数据结构(4)

实验步骤:

任务:要求使用自定义函数来实现

输入一段文本,统计每个字符出现的次数,按照字符出现次数从多到少,依次输出,格式如下:

字符1-个数

字符2-个数

......

解题思路:

构建结构体,然后将数据依次输入结构体中,随后进行排序输出。

算法代码如下:

cpp 复制代码
#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个数据项。 代码如下: ```cpp #include #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;isize=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。单链表的插入、删除、取元素等操作均可通过调用单链表的插入、删除、取元素等操作来实现。 代码如下: ```cpp #include #include 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;inext=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&&jnext; 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&&jnext; 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&&jnext; 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; } ```

相关推荐
编程侦探13 分钟前
【设计模式】适配器模式:让不兼容的接口和谐共处
开发语言·c++·设计模式·适配器模式
张立龙66643 分钟前
有序二叉树各种操作实现(数据结构C语言多文件编写)
c语言·开发语言·数据结构
2401_8454174544 分钟前
C++ string类
java·开发语言·c++
Y.O.U..1 小时前
力扣HOT100——560.和为k的子数组
数据结构·c++·算法·leetcode
wuqingshun3141591 小时前
经典算法 判断一个图中是否有环
java·开发语言·数据结构·c++·算法·蓝桥杯·深度优先
柃歌1 小时前
【LeetCode Solutions】LeetCode 160 ~ 165 题解
数据结构·算法·leetcode
爱编码的傅同学1 小时前
数据结构(六)——红黑树及模拟实现
数据结构·算法
小黑屋的黑小子1 小时前
【数据结构】HashMap源码 —— 简单介绍
数据结构·算法·面试·源码·hashmap
编程见习者1 小时前
OpenCV的详细介绍与安装(一)
c++·人工智能·opencv·计算机视觉
邪恶的贝利亚1 小时前
C++ 基础深入剖析:编译、内存与面向对象编程要点解析
开发语言·c++