数据结构大作业(含源代码)
数据结构经典题目及c语言代码

数据结构经典题目及c语言代码一、线性表1. 顺序表顺序表是一种利用连续存储空间存储元素的线性表。
以下是一个顺序表的经典题目及C语言代码实现:```c#define MaxSize 50typedef struct {int data[MaxSize]; // 存储元素的数组int length; // 顺序表的当前长度} SeqList;// 初始化顺序表void initList(SeqList *L) {L->length = 0;}// 插入元素到指定位置void insert(SeqList *L, int pos, int elem) {if (pos < 1 || pos > L->length + 1) {printf("插入位置无效\n");return;}if (L->length == MaxSize) {printf("顺序表已满,无法插入\n"); return;}for (int i = L->length; i >= pos; i--) { L->data[i] = L->data[i - 1];}L->data[pos - 1] = elem;L->length++;}// 删除指定位置的元素void delete(SeqList *L, int pos) {if (pos < 1 || pos > L->length) {printf("删除位置无效\n");return;}for (int i = pos - 1; i < L->length - 1; i++) {L->data[i] = L->data[i + 1];}L->length--;}// 获取指定位置的元素值int getElement(SeqList *L, int pos) {if (pos < 1 || pos > L->length) {printf("位置无效\n");return -1;}return L->data[pos - 1];}```2. 链表链表是一种利用非连续存储空间存储元素的线性表。
数据结构大作业-哈夫曼编码实验报告

一.构造过程①统计可知,字符串全长共59个字符,其中字符‘A’-‘F’的出现频数及对应概率(保留两位小数)如图所示:②将每个字符出现概率作为权重,则对于上述给定的6个权值{25,15,14,20,17,9},依次构造6棵只有根节点的二叉树,共同构成森林F;③在森林F中,选取权重最小和次小的两颗树,分别作为新二叉树的左子树、右子树,且该树根节点权值赋左右子树权值之和;④从森林F中删除已选中的两棵子树,把新得到的二叉树加入F 中;⑤重复③④,直到森林F中仅留下一棵树时,得到最终的哈夫曼树HF如图所示:⑥对上述哈夫曼树,将其树中的每个左分支赋0、右分支赋1,则从根结点开始到叶子结点,各分支路径分别得到对应的二进制串,即为给定的每个字符的哈夫曼编码。
二、代码实现源代码如下:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 6 //指定的编码字符数#define M (2 * N - 1) //HT结点数#define MAXWEIGHT 100typedef struct { //哈夫曼树的存储表示int weight;int parent, lchild, rchild;}HTNode;typedef HTNode HuffmanTree[M + 1];typedef char* HuffmanCode[N + 1]; //哈夫曼编码表void Select(HuffmanTree HT, int n, int& s1, int& s2);void CreateHuffmanTree(HuffmanTree& HT, int* w, int n); void CreateHuffmanCode(HuffmanTree HT, HuffmanCode& HC); void PrintHC(HuffmanCode HC, char ch[]);int main() {HuffmanTree HT;HuffmanCode HC;int w[N + 1];char ch[N + 1];printf("Please input %d characters & its weight(e.g. A 25):\n", N);for (int i = 1; i <= N; i++) {scanf("%c %d", &ch[i], &w[i]);getchar();}CreateHuffmanTree(HT, w, N);CreateHuffmanCode(HT, HC);PrintHC(HC, ch);return 0;}void Select(HuffmanTree HT, int n, int& s1, int& s2) { int i, min = 0, temp = MAXWEIGHT;for (i = 1; i <= n; i++) {if (!HT[i].parent) {if (temp > HT[i].weight) {temp = HT[i].weight;min = i; //最小值作为新树左子树}}}s1 = min;for (i = 1, min = 0, temp = MAXWEIGHT; i <= n; i++) { if ((!HT[i].parent) && i != s1) {if (temp > HT[i].weight) {temp = HT[i].weight;min = i; //次小值作为新树右子树}}}s2 = min;}void CreateHuffmanTree(HuffmanTree& HT, int* w, int n) { //创建哈夫曼树HTint i, s1, s2;if (n <= 1) return; //树为空或仅有根节点for (i = 1; i <= M; ++i) { //初始化HT[i].weight = w[i];HT[i].parent = 0;HT[i].lchild = 0;HT[i].rchild = 0;}for (i = n + 1; i <= M; ++i) { //创建新二叉树Select(HT, i - 1, s1, s2);HT[s1].parent = i;HT[s2].parent = i;HT[i].lchild = s1;HT[i].rchild = s2;HT[i].weight = HT[s1].weight + HT[s2].weight;}}void CreateHuffmanCode(HuffmanTree HT, HuffmanCode& HC) {int i, start, c, f;char cd[N];cd[N - 1] = '\0'; //编码结束符for (i = 1; i <= N; i++) { //对于第i个待编码字符即第i个带权值的叶子节点start = N - 1; //开始start指向结束符位置c = i;f = HT[i].parent; //f指向当前结点的双亲while (f) { //从叶上溯,到根节点跳出if (HT[f].lchild == c)cd[--start] = '0'; //左孩子elsecd[--start] = '1'; //右孩子c = f;f = HT[f].parent;}HC[i] = new char[N - start];strcpy(HC[i], &cd[start]); //复制结果到编码表,用于输出}}void PrintHC(HuffmanCode HC, char ch[]) { //打印哈夫曼编码表for (int i = 1; i <= N; i++)printf("\n%c: %s\n", ch[i], HC[i]);}三,输出各个字母的哈夫曼编码:四、算法分析1、哈夫曼编码是最优前缀编码:对包括N个字符的数据文件,分别以它们的出现概率构造哈夫曼树,利用该树对应的哈夫曼编码对报文进行编码,得到压缩后的最短二进制编码;2、算法自底而上地构造出对应最优编码的二叉树HT,它从n个叶子结点开始,识别出最低权重的两个对象,并将其合并;当合并时,新对象的权重设置为原两个对象权值之和,一共执行了|n| - 1次合并操作;3、是贪心算法:每次选择均为当下的最优选择,通过合并来构造最优树得到对应的哈夫曼编码;4、复杂度:①时间复杂度:有n个终端节点,构成的哈夫曼树总共有2n-1个节点,Select函数的时间复杂度为O(n),嵌套for循环,因此建立哈夫曼树的时间复杂度为O(n^2),创建哈弗曼编码表的时间复杂度为O(n^2);②空间复杂度:算法中临时占用存储空间大小为数组第0号空间,其耗费的空间复杂度为O(1)。
数据结构上机实验源代码

数据结构上机实验源代码栈的应用十进制数转换为八进制数,逆序输出所输入的数实验代码://stack.h,头文件class stack{public:stack();bool empty()const;bool full()const;error_code gettop(elementtype &x)const;error_code push(const elementtype x);error_code pop();private:int count;elementtype data[maxlen];};stack::stack(){count=0;}bool stack::empty()const{return count==0;}bool stack::full()const{return count==maxlen;}error_code stack::gettop(elementtype &x)const{if(empty())return underflow;else{x=data[count-1];return success;}}error_code stack::push(const elementtype x){if(full())return overflow;data[count]=x;count++;return success;}error_code stack::pop(){if(empty())return underflow;count--;return success;}//主程序#include<iostream.h>enum error_code{overflow,underflow,success};typedef int elementtype;const int maxlen=20;#include"stack.h"void read_write() //逆序输出所输入的数{stack s;int i;int n,x;cout<<"please input num int n:";cin>>n;for(i=1;i<=n;i++){cout<<"please input a num:";cin>>x;s.push(x);}while(!s.empty()){s.gettop(x);cout<<x<<" ";s.pop();}cout<<endl;}void Dec_to_Ocx(int n) //十进制转换为八进制{stack s1;int mod,x;while(n!=0){mod=n%8;s1.push(mod);n=n/8;}cout<<"the ocx of the dec is:";while(!s1.empty()){s1.gettop(x);cout<<x;s1.pop();}cout<<endl;}void main(){int n;// read_write();cout<<"please input a dec:";cin>>n;Dec_to_Ocx(n);}队列的应用打印n行杨辉三角实验代码://queue.hclass queue{public:queue(){count=0;front=rear=0;}bool empty(){return count==0;}bool full(){return count==maxlen-1;}error_code get_front(elementtype &x){if(empty())return underflow;x=data[(front+1)%maxlen];return success;}error_code append(const elementtype x){if(full())return overflow;rear=(rear+1)%maxlen;data[rear]=x;count++;return success;}error_code serve(){if(empty())return underflow;front=(front+1)%maxlen;count--;return success;}private:int count;int front;int rear;int data[maxlen];};//主程序#include<iostream.h>enum error_code{overflow,underflow,success};typedef int elementtype;const int maxlen=20;#include"queue.h"void out_number(int n) //打印前n行的杨辉三角{int s1,s2;int i;int j;int k;queue q;for(i=1;i<=(n-1)*2;i++)cout<<" ";cout<<"1 "<<endl;q.append(1);for(i=2;i<=n;i++){s1=0;for(k=1;k<=(n-i)*2;k++)cout<<" ";for(j=1;j<=i-1;j++){q.get_front(s2);q.serve();cout<<s1+s2<<" ";q.append(s1+s2);s1=s2;}cout<<"1 "<<endl;q.append(1);}}void main(){int n;cout<<"please input n:";cin>>n;out_number(n);}单链表实验实验目的:实验目的(1)理解线性表的链式存储结构。
数据结构试题大题编程及参考答案

数据结构考试题参考答案1、设顺序表L中的数据元素递增有序。
试写一算法,将数据元素x插入到顺序表L的适当位置,以保持该表的有序性。
解:存储结构为:typedef struct SeqList{ DataType *data;int MaxLen;int len;}SeqList;算法如下:void insertLx(SeqList &L, DataType x){ if(L.len==L.maxlen) return;int i=L.len-1;while(i>=0 && x<L.data[i]){ L.data[i+1]=L.data[i]; i=i-1;}L.data[i+1]=x; L.len++;}2、试写一个算法,在带头结点的单链表L的元素x前插入一个结点y。
解:存储结构如下:typedef struct Lnode{ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下:void insert_y_before_x(LinkList L, ElemType x, ElemType y){ Lnode *q, *p=L;while(p->next && p->next->data!=x) p=p->next; //找x的前驱结点p;if(!p->next) return; // 若不存在结点x,则返回;q=new Lnode;q->data=y; q->next=p->next; p->next=q;}3、试写一个算法,统计带头指针的单链表L的元素个数。
解:存储结构如下:typedef struct Lnode{ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下:int length(LinkList L){ int len=0;Lnode *p=L;while(p) { len++; p=p->next; }return len;}注:如果单链表是带头结点的,则算法如下:int length(LinkList L){ int len=0;Lnode *p=L->next;;while(p) { len++; p=p->next; }return len;}4、试写一个算法,在带头结点的单链表L的第k个结点后插入一个结点x。
数据结构大作业含源代码

数据结构大作业作业题目:职工信息管理系统姓名:学号:班级:指导教师:日期:一、主要功能:这个职工信息管理系统是由C语言编写的程序,它用起来很方便又很灵活。
它由输入职工信息,输出职工信息,按职工号,部门号,工资排序,按职工号,部门号,工资来输出职工的所有信息。
删除有关职工的所有信息,保存职工的所有信息并退出等11个模块儿组成。
二、实验环境:C语言、C++、C# 等等。
三、功能说明:下面按步骤来介绍一下,职工信息管理系统的基本操作。
这是运行程序以后出现的主界面。
如图(1)所示:图(1)主界面1.输入职工的信息该模块儿的功能是分别输入职工的姓名,职工号,部门号,工资等信息。
每次输入职工的所有信息以后,界面上会显示出《输入完成!》的命令。
如图(2)所示:图(2)输入职工信息该模块儿的功能是显示出有关职工的所有信息。
操作如图(3)所示:图(3)输出所有的职工信息3.按职工号排序该模块儿的功能是按职工号排序所有的职工。
我们按3的时候,界面上会显示出《排序完成!》的命令。
如图(4)所示:图(4)按职工号排序该模块儿的功能是显示出已排序好的所有职工的号码。
操作如图(5)所示:图(5)输出所有的职工号5.按部门号排序该模块儿的功能是按部门号排序所有职工的部门号。
我们按5的时候,界面上会显示出《排序完成!》的命令。
如图(6)所示:图(6)按部门号排序该模块儿的功能是显示出已排序好的所有部门号。
操作如图(7)所示:图(7)输出所有的部门号7.按职工的工资排序该模块儿的功能是按工资排序所有职工的工资。
我们按7的时候,界面上会显示出《排序完成!》的命令。
如图(8)所示:图(8)按职工的工资排序该模块儿的功能是显示出已排序好的所有职工的工资。
操作如图(9)所示:图(9)输出所有职工的工资9.删除职工的所有信息该模块儿的功能是删除有关职工的所有信息。
我们按9的时候界面上会显示出《删除成功!》的命令。
如图(10)所示:图(10)删除职工的所有信息10.保存该模块儿的功能是保存有关职工的所有信息。
数据结构试验完整代码

数据结构实验完整代码目录一、顺序存储的线性表 (2)二、单链存储的线性表 (4)三、栈 (7)四、队列 (8)五、二叉树的建立和遍历 (10)六、霍夫曼树 (11)七、图的建立和遍历 (17)图的邻接矩阵表示 (17)图的邻接表表示 (20)八、图的最小生成树 (23)九、图的最短路径 (28)十、顺序查找表 (31)十一、二叉排序树的查找 (34)十二、哈希表 (36)十三、插入排序 (41)十四、交换排序-冒泡排序 (44)十五、交换排序-快速排序 (45)十六、简单选择排序 (45)十七、堆排序 (46)一、顺序存储的线性表typedef struct{char name[10];char no[10];double grade;}Student;typedef struct{Student *elem;int length;int listsize;}SqList;void Display(SqList *L){int i;for (i=0;i<L->length ;i++){cout<<i+1<<":姓名"<<L->elem[i].name<<",学号:"<<L->elem[i].no<<",成绩:"<<L->elem[i].grade <<endl;}cout<<"请选择菜单项:";}SqList *CreateList(){SqList *L;L=(SqList*)malloc(sizeof(SqList));if(!L) cout<<"建立线性表失败!";else cout<<"建立线性表成功!";return(L);}int InitList(SqList *L){int i;char name[10],no[10];double grade;L->elem=(Student *)malloc(ListInitSize * sizeof(Student));if (!(L->elem)) cout<<"初始化表失败!";L->length = 0;L->listsize = ListInitSize;cout<<"请输入要录入信息的学生个数:"<<endl;cin>>i;if (i>(L->listsize)){L->elem =(Student *)realloc(L->elem ,i*sizeof(Student));}for (int j=0;j<i;j++){cout<<"请输入第"<<j+1<<"个学生的信息:"<<endl;cin>>name>>no>>grade;strcpy((L->elem+L->length)->name,name);strcpy((L->elem+L->length)->no,no);(L->elem+L->length)->grade =grade;L->length ++;}cout<<"信息录入完成!";return 0;}int Insert(SqList *l){Student e;int i,j;Student *newbase;cout<<"请输入要插入的位置:";cin>>j;j--;cout<<"请输入学生信息:";cin>>>>e.no>>e.grade;if(l->length==l->listsize){newbase=(Student*)realloc(l->elem,(l->listsize+ListIncreasement)*sizeof(Studen t));if(!newbase){cout<<"出错!";return 0;}l->elem=newbase;l->listsize+=ListIncreasement;}for(i=l->length;i>=j;i--){l->elem[i+1] = l->elem[i];}l->elem[j]=e;l->length++;cout<<"插入成功!";return 0;}int Delect(SqList *L){int i,j;cout<<"输入删除信息的位置:";cin>>j;j--;cout<<"删除的信息为:姓名:"<<L->elem[j].name<<",学号:"<<L->elem[j].no<<"成绩:"<<L->elem[j].grade<<endl;for(i=j+1;i<=L->length;i++){L->elem[i-1]=L->elem[i];}L->length--;cout<<"请按回车继续"<<endl;getchar();getchar();cout<<"删除成功!";return 0;}二、单链存储的线性表typedef struct Student{char name[10];char no[10];double grade;}Student;typedef struct LNode{Student data;LNode *next;}LNode,*LinkList;void CreateList(LinkList &l){l=(LinkList)malloc(sizeof(LNode));if (!l) cout<<"建立失败。
数据结构实验系统源代码(期末作业)

/* 树子系统*/#include <stdio.h>#include <malloc.h> #define MAX 100int count=0; /* 定义计算结点个数的变量*/ typedef struct tnode{char data;struct tnode *lchild,*rchild;}BT;BT *CreateBTree(){BT *t;char ch;scanf("%c",&ch);getchar();if(ch=='0')t=NULL;else{t=(BT *)malloc(sizeof(BT));t->data=ch;printf("请输入%c结点的左孩子结点:t->lchild=CreateBTree();printf("请输入%c结点的右孩子结点:t->rchild=CreateBTree();}return t;}void ShowBTree(BT *T){ if (T!=NULL){ printf("%c",T->data);if(T->lchild!=NULL){ printf("(");ShowBTree(T->lchild);if(T->rchild!=NULL){ printf(",");ShowBTree(T->rchild);}printf(")");}else",t->data);",t->data/* 用广义表表示法显示二叉树*//*当二叉树非空时*//*输入该结点数据域*//* 若其左子树非空*//* 输入左括号*//* 递归调用该函数输出其左子树各结点*/ /* 若其右子树非空*//* 输出逗号*//* 递归调用该函数输出其右子树各结点*//* 二叉树左子树为空,右子树不为空时*/ if(T->rchild!=NULL){printf("(");ShowBTree(T->lchild);if(T->rchild!=NULL){ printf(",");ShowBTree(T->rchild);} printf(")");}}}void PreOrder(BT *T){ if(T==NULL) return;else{ printf("%c",T->data);PreOrder(T->lchild);PreOrder(T->rchild);}}void InOrder(BT *T){ if(T==NULL) return;else{ InOrder(T->lchild);printf("%c",T->data);InOrder(T->rchild);}}void PostOrder(BT *T){ if (T==NULL) return;else{ PostOrder(T->lchild);PostOrder(T->rchild);printf("%c",T->data);}}void LevelOrder(BT *T){ int f,r;BT *p,*q[MAX];p=T;/* 输入左括号*//* 递归调用该函数输出其左子树各结点*/ /* 若其右子树非空*//* 输出逗号*//*递归调用该函数输出其右子树各结点*//* 先序遍历二叉树T*//*递归调用的结束条件*//* 输出结点的数据域*//*先序递归遍历左子树*//*先序递归遍历右子树*//* 中序遍历二叉树T*//* 递归调用的结束条件*//* 中序递归遍历左子树*//* 输出结点的数据域*//* 中序递归遍历右子树*//* 后序遍历二叉树T*//* 递归调用的结束条件*//* 后序递归遍历左子树*//* 后序递归遍历右子树*//* 输出结点的数据域*//* 按层次遍历二叉树T*//* 定义队头队尾指针*//* 定义循环队列,存放结点指针*if(p!=NULL){ f=1; q[f]=p; r=2; } while(f!=r) { p=q[f];printf("%c",p->data); if(p->lchild!=NULL) { q[r]=p->lchild; r=(r+1)%MAX; }if(p->rchild!=NULL) { q[r]=p->rchild; r=(r+1)%MAX; }f=(f+1)%MAX; }}/* 若二叉树非空,则根结点地址入队*//* 队列不空时 *//* 访问队首结点的数据域 */ /* 将队首结点的左孩子入队 *//* 将队首结点的右孩子入队 */void Leafnum(BT *T) /* 求二叉树叶子结点数 */ { if(T)/* 若树不为空 */{ if(T->lchild==NULL && T->rchild==NULL)count++; Leafnum(T->lchild); Leafnum(T->rchild);} }/* 全局变量 count 为计数值, 其初值为 0*/ /* 递归统计 T 的左子树叶子结点数 */ /* 递归统计 T 的右子树叶子结点数 */return rdep+1;void Nodenum(BT *T) { if(T) { count++;Nodenum(T->lchild); Nodenum(T->rchild);}} int TreeDepth(BT *T) { int ldep=0,rdep=0; 的深度 */ if(T==NULL) return 0; else { ldep=TreeDepth(T->lchild); rdep=TreeDepth(T->rchild); if(ldep>rdep)return ldep+1; else /* 若树不为空 *//* 全局变量 c ount 为计数值, 其初值为0*/ /* 递归统计 T 的左子树结点数 */ /* 递归统计 T 的右子树结点数 *//* 求二叉树深度 *//* 定义两个整型变量, 用以存放左、右子树/* 递归统计 T 的左子树深度 */ /* 递归统计 T 的右子树深度 */二叉树子系统");printf ("\n ================================================="); printf ("\n| 1——建立一个新二叉树 |"); printf ("\n| 2 --- 广义表表示法显示 |"); printf ("\n| 3 --- 先序遍历 |"); printf ("\n| 4 --- 中序遍历 |"); printf ("\n| 5 --- 后序遍历 |"); printf ("\n| 6 --- 层次遍历 |"); printf ("\n| 7 --- 求叶子结点数目 |"); printf ("\n| 8 --- 求二叉树总结点数目 |"); printf ("\n| 9——求树深度 |"); printf ("\n|0 --- 返回|");printf ("\n ================================================"); printf ("\n 请输入菜单号(0-9 ):");btree () (BT *T=NULL; char ch1,ch2,a; ch1='y';while (ch1=='y'||ch1=='Y') { MenuTree ();scanf ("%c",&ch2); getchar (); switch (ch2) {case '1':printf ("请按先序序列输入二叉树的结点: \n");printf ("说明:输入结点后按回车(’0'表示后继结点为空):\n"); printf ("请输入根结点:"); T=CreateBTree ();printf ("二叉树成功建立! ");break; case '2':printf ("二叉树广义表表示法如下: "); ShowBTree (T );break; case '3':printf ("二叉树的先序遍历序列为: "); PreOrder (T );break; case '4':printf(" 二叉树的中序遍历序列为: ");void (MenuTree ()/*显示菜单子函数*/printf ("\nInOrder(T);break;case '5':printf(" 二叉树的后序遍历序列为:");PostOrder(T);break;case '6':printf(" 二叉树的层次遍历序列为:");LevelOrder(T);break;case '7':count=0;Leafnum(T);printf("该二叉树有%~个叶子。
数据结构与算法实验源代码

数据结构与算法实验源代码数据结构与算法实验源代码1.实验目的本实验旨在通过实践,加深对数据结构与算法的理解与应用能力,掌握数据结构和算法的基本概念与原理,并能够运用所学知识解决实际问题。
2.实验材料●一台已安装好编译器的计算机●数据结构与算法实验源代码文件3.实验环境配置在实验开始之前,必须确保计算机上已安装好以下环境:●编译器(可以是C++、Java等)●数据结构与算法实验源代码文件4.实验内容及步骤4.1 实验一:线性表4.1.1 实验目的通过实现线性表的相关操作,加深对线性表及其操作的理解,并能够灵活应用。
4.1.2 实验步骤1.实现线性表的初始化函数2.实现线性表的插入操作3.实现线性表的删除操作4.实现线性表的查找操作5.实现线性表的排序操作6.实现线性表的输出操作7.编写测试代码,对线性表进行测试4.1.3 实验结果与分析进行若干测试用例,验证线性表的正确性,并分析算法的时间复杂度与空间复杂度。
4.2 实验二:栈与队列4.2.1 实验目的通过实现栈与队列的相关操作,加深对栈与队列的理解,并掌握栈与队列的应用场景。
4.2.2 实验步骤1.实现栈的初始化函数2.实现栈的入栈操作3.实现栈的出栈操作4.实现栈的查看栈顶元素操作5.实现队列的初始化函数6.实现队列的入队操作7.实现队列的出队操作8.实现队列的查看队首元素操作4.2.3 实验结果与分析进行若干测试用例,验证栈与队列的正确性,并分析算法的时间复杂度与空间复杂度。
(继续添加实验内容及步骤,具体根据实验项目和教学要求进行详细分析)5.实验附件本文档所涉及的实验源代码文件作为附件随文档提供。
6.法律名词及注释6.1 版权:著作权法所规定的权利,保护作品的完整性和原创性。
6.2 开源:指软件可以被任何人免费使用、分发和修改的一种软件授权模式。
(继续添加法律名词及注释)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
clrscr();
printf("all done!\n");
getch();
return(h);
数据结构大作业
} employee *SortByWages(employee *head) {
employee *p,*q,*s,*h,*temp; temp=malloc(sizeof(employee)); h=head; for(s=head->next; s!=NULL; s=s->next) {
数据结构大作业
else
{
p=head->next;
if(p!=NULL)
{
clrscr();
printf("all information of employee\n\n");
printf("employee's name
employee's number
number employee's wages\n");
/*no 为职工号,depno 为部门号,salary 为工资数*/
char name[maxsize];
/*职工姓名*/
struct node *pno,*pdepno,*psalary,*next; /*pno 为职工号指针,pdepno 为部门号
指针,psalary 为工资数指针*/
}employee;
数据结构大作业
p=s; for(q=s->next; q!=NULL; q=q->next) {
if((p->no)>(q->no)) p=q;
} if(p!=s) {
temp->no=s->no; temp->depno=s->depno; temp->salary=s->salary; strcpy(temp->name,s->name); s->no=p->no; s->depno=p->depno; s->salary=p->salary; strcpy(s->name,p->name); p->no=temp->no; p->depno=temp->depno; p->salary=temp->salary; strcpy(p->name,temp->name); } } clrscr(); printf("all done!\n"); getch(); return(h); }
{
p=s;
for(q=s->next; q!=NULL; q=q->next)
{
if((p->depno)>(q->depno))
p=q;
}
if(p!=s)
{
temp->no=s->no;
temp->depno=s->depno;
temp->salary=s->salary;
strcpy(temp->name,s->name);
显然, 结构体中的成员包括职工姓名、职工号、部门号、职工工资、以及一些指向
其它该类型结点的指针变量.
下面介绍实现第一个功能的代码:
employee *insert(employee *head) {
employee *h;
if(head==NULL) {
employee *s,*h1; h1=malloc(sizeof(employee));
s=malloc(sizeof(employee)); clrscr();
数据结构大作业
printf("please input employee's name:"); scanf("%s",s->name); printf("please input employee's number:"); scanf("%d",&s->no); printf("please input department's number:"); scanf("%d",&s->depno); printf("please input employee's wages:"); scanf("%d",&s->salary); s->pno=NULL; s->pdepno=NULL; s->psalary=NULL; s->next=NULL; h1->pno=NULL; h1->pdepno=NULL; h1->psalary=NULL; h1->next=s; h=h1; printf("all done!\n"); getch(); } if(head!=NULL) {
3 实验仪器
每人 1 台安装有 Turbo C 的普通学生电脑。
数据结构大作业
4 实验内容
利用静态链表来实现这一综合算法。
5 实验重点
掌握链表的常用操作。
6 程序功能及其实现详解
下面将详细介绍本程序的所有功能的实现方式即代码的含义, 在设计本程序时, 本人尽可能地用了质量好一点的算法, 因为本程序有以上 10 个功能, 显然应有实现相
s->no=p->no;
s->depno=p->depno;
s->salary=p->salary;
strcpy(s->name,p->name);
p->no=temp->no;
p->depno=temp->depno;
p->salary=temp->salary;
strcpy(p->name,temp->name);
p=s; for(q=s->next; q!=NULL; q=q->next) {
if((p->salary)>(q->salary)) p=q;
while(p!=NULL)
{
department's
printf("\t%s\t\t%d\t\t\t%d\t\t %d\n",p->name,p->no,p->depno,p->salary); p->next;
} } } getch(); } 本函数的功能是实现职工记录表中的所有记录,若没有任何一个记录, 则输出一个 提示语句来提醒使用者职工表为空, 若不为空则从第一号结点开始输出一直到最后一 个结点(以表格形式输出). 下面分别介绍根据职工号、部门号以及职工工资来排序的函数: employee *SortByEmployeeNumber(employee *head) { employee *p,*q,*s,*h,*temp; temp=malloc(sizeof(employee)); h=head; for(s=head->next; s!=NULL; s=s->next) {
2 程序简介
该程序的功能可以从以下十个方面来说明: 1.输入:添加一个职工记录 2.输出:输出全部职工记录 3.按职工号排序:通过职工号指针将职工记录按职工号从小到大连接起来 4.按职工号输出:沿职工号指针输出全部职工记录 5.按部门号排序:通过部门号指针将职工记录按部门号从小到大连接起来 6.按部门号输出:沿部门号指针输出全部职工记录 7.按职工工资排序:通过职工工资指针将职工记录按职工工资从小到大连接起来 8.按职工工资输出:沿职工号指针输出全部职工记录 9.全清:删除职工文件中有的全部记录 10.存储退出:将单链表中的全部结点存储到职工文件中,然后退出程序运行过程
employee *SortByDepartmentNumber(employee *head) {
数据结构大作业
employee *p,*q,*s,*h,*temp;
temp=malloc(sizeof(employee));
h=head;
for(s=head->next; s!=NULL; s=s->next)
employee *s,*p,*h1; h1=head; p=h1->next; s=malloc(sizeof(employee)); if(p->next!=NULL) {
while(p->next!=NULL) p=p->next;
数据结构大作业
clrscr(); printf("please input employee's name:"); scanf("%s",s->name); printf("please input employee's number:"); scanf("%d",&s->no); printf("please input department's number:"); scanf("%d",&s->depno); printf("please input employee's wages:"); scanf("%d",&s->salary); s->pno=NULL; s->pdepno=NULL; s->psalary=NULL; s->next=NULL; p->next=s; h=h1; printf("all done!\n"); getch(); } if(p->next==NULL) { clrscr(); printf("please input employee's name:"); scanf("%s",s->name); printf("please input employee's number:"); scanf("%d",&s->no); printf("please input department's number:"); scanf("%d",&s->depno);