数据结构实验整理(一)
文章目录
- 一.线性表的基本操作
- 二.链表的基本操作
- 三.顺序栈的基本操作
- 四.链队列的基本操作
日常作业存档_(:з」∠)_
一.线性表的基本操作
(1) 实验目的
通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。
(2) 实验内容
编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。
(3) 参考界面
(3)验收/测试用例
通过菜单调用各个操作,测试点:
- 没有初始化前进行其他操作,程序是否能控制住;
- 初始化一个顺序表;
- 插入数据(位置, 数据),要测插入位置不合法的情况(0,1)、(2,1)(即是否在可插入的范围内),正确插入4个数据(1,2)、(1,1)、(3,3);
- 显示顺序表中的数据,屏幕输出1, 2, 3;
- 判空,屏幕输出顺便表非空;
- 顺便表长度,屏幕输出3;
- 获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;
- 定位,输入:4, 输出:不存在,输入2,输出位置为2;
- 求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱;
- 求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;
- 删除,要测位置在【1,3】范围之外的情况和之内的情况;
- 清空操作后再测长度;
- 销毁顺序表
实现代码
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100 //初始分配量
#define LISTINCREMENT 10 //线性表存储空间分配量
typedef int ElemType;
typedef struct
{ElemType *elem;int length;int listsize;
}SqList;
void InitList_Sq(SqList &L)//初始化
{L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));if(!L.elem) {printf("分配空间失败!\n");exit(1);}L.length = 0;L.listsize = LIST_INIT_SIZE;printf("创建成功!\n");} void DestoryList(SqList &L)//销毁
{if(L.elem){delete L.elem;printf("销毁成功\n");}elseprintf("销毁失败\n");
}void ClearList(SqList &L)//清空
{if(L.length){L.length = 0;printf("清空成功!\n");}elseprintf("无需清空。\n");
}void IfEmpty(SqList &L)//判断是否为空
{if(L.length){printf("线性表非空!\n"); }elseprintf("线性表为空。\n");
}void GetLength(SqList &L)//取线性表长度
{printf("线性表的长度为 %d \n",L.length); }void GetElem(SqList &L,int i,int &e)//取值 第i位的数 为 e
{if(i < 1||i > L.length){printf("取值失败!\n");}else{e = L.elem[i-1];printf("第%d个元素为:%d\n",i,e); }
}void PriorElem(SqList &L,ElemType cur_e)//求某个元素对应的前驱
/*输入直接是元素位置,判断有无前驱 有则直接输出elem[i-1])*/
{int i = cur_e-1,pre;if(i == 0)printf("该元素没有前驱。\n");else if(i <= 0||i >= L.length)printf("该元素不存在。\n");else{pre = L.elem[i-1];printf("该元素的前驱为 %d\n",pre);}
}void NextElem(SqList &L,ElemType cur_e)//求某个元素对应的后继 原理同上
{int i = cur_e-1,next;if(i == L.length-1)printf("该元素没有后继。\n");else if(i < 0||i > L.length-1)printf("该元素不存在。\n");else{next = L.elem[i+1];printf("该元素的后继为 %d \n",next);}
}void ListInsert(SqList &L,int i,int e)//插入 i位置 数值e
{if(i < 1 ||i > L.length+1){printf("插入失败!\n");}else if(L.length == LIST_INIT_SIZE){printf("插入失败!\n");}else{for(int j = L.length - 1;j >= i - 1;j--){L.elem[j+1] = L.elem[j];}L.length++;L.elem[i-1] = e;printf("插入成功!\n");}} void ListDelete(SqList &L,int i)//删除指定位置元素
{if(i < 1||i > L.length){printf("删除失败!\n"); }int j;for(j = i;j < L.length;j++){L.elem[j-1] = L.elem[j];}--L.length;printf("删除成功!\n");
} void TraverseList(SqList L)//遍历输出(显示线性表)
{int i;for(i=1;i<=L.length;i++){printf("%d ",L.elem[i-1]);}printf("\n");
}
int main()
{int n,i,e,cur_e;SqList L;L.elem = 0;printf("1----初始化一个线性表\n");printf("2----销毁线性表\n"); printf("3----清空线性表\n"); printf("4----判断线性表是否为空\n"); printf("5----求线性表长度\n"); printf("6----获取线性表指定位置元素\n"); printf("7----求前驱\n"); printf("8----求后继\n"); printf("9----在线性表指定位置插入元素\n"); printf("10----删除线性表指定位置元素\n"); printf("11----显示线性表\n"); printf("\t退出,输入一个负数!\n"); printf("请输入操作代码:\n"); while(~scanf("%d",&n)){if(n < 0){break;}if(n == 1){InitList_Sq(L);}if(n == 2){if(L.elem == 0){printf("未进行初始化\n"); }else{DestoryList(L);L.elem = 0;}}if(n == 3){if(L.elem == 0){printf("未进行初始化\n"); }else{ClearList(L);}}if(n == 4){if(L.elem == 0){printf("未进行初始化\n"); }else{IfEmpty(L);}}if(n == 5){if(L.elem == 0){printf("未进行初始化\n"); }else{GetLength(L);}}if(n == 6){if(L.elem == 0){printf("未进行初始化\n"); }else{printf("请输入需要获取的元素的位置:\n");scanf("%d",&i);GetElem(L,i,e);}}if(n == 7){if(L.elem == 0){printf("未进行初始化\n"); }else{printf("请输入需要查找前驱的元素位置:\n");scanf("%d",&cur_e);PriorElem(L,cur_e);}}if(n == 8){if(L.elem == 0){printf("未进行初始化\n"); }else{printf("请输入需要查找后继的元素位置:\n");scanf("%d",&cur_e);NextElem(L,cur_e);}}if(n == 9){if(L.elem == 0){printf("未进行初始化\n"); }else{printf("请输入需要插入的元素的位置和值(输入格式:i,e):\n");scanf("%d,%d",&i,&e);ListInsert(L,i,e); }}if(n == 10){if(L.elem == 0){printf("未进行初始化\n"); }else{printf("请输入需要删除的元素的位置:\n");scanf("%d",&i);ListDelete(L,i);}}if(n == 11){if(L.elem == 0){printf("未进行初始化\n"); }else{TraverseList(L); }}}return 0;
}
二.链表的基本操作
(1)实验目的
通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。和实验3对比,掌握线性结构两种不同存储方式的区别。
(2)实验内容
编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。
(3)参考界面
(4)验收/测试用例
同实验一
实现代码
#include <stdio.h>
#include <stdlib.h>
void init()
{printf("可执行操作有:\n");for(int i = 0;i < 55;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t1.初始化或重置链表\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t2.销毁链表\t\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t3.链表中数据元素个数\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t4.所指位序的元素值\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t5.链表已存在元素的位序\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t6.请输入元素,求直接前驱");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t7.请输入元素,求直接后继");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*"); printf("\t8.在第i个位置插入元素\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t9.删除第i个元素\t\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t10.输出所输入的链表元素\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t11.初始化并输入链表元素\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 15;i++)printf("*");printf("\t12.退出\t\t\t");for(int i = 0;i < 15;i++)printf("*");printf("\n");for(int i = 0;i < 55;i++)printf("*"); printf("\n");printf("请输入你的选择:\n");
}typedef struct LNode{int data;struct LNode *next;
}LNode,*LinkList;void InitList(LinkList &L)//链表初始化
{if(!(L == 0)){LinkList p,q;p = L->next;while(p){q = p-> next;free(p);p = q;}L->next = NULL;printf("链表已重置\n");}else{L = (LNode*)malloc(sizeof(LNode));L->next = NULL;printf("初始化成功!\n");}
}void DestoryList(LinkList *L)//链表销毁
{LinkList q,p = *L;//p指向L链表头结点 if(p == 0)printf("链表未初始化!\n");else{while(p != 0){q = p -> next;delete p;p = q;}*L = NULL;//头结点指针清空 L = 0;printf("链表销毁成功!\n");}}void CountNode(LinkList &L)//计算节点个数
{if(L == 0)printf("链表未初始化!\n");else{int n = 0;LNode *p;p = L->next;while(p){p = p->next;++n;}if(n)printf("节点有 %d 个\n",n);elseprintf("链表为空!\n");}
}
void CreatList(LinkList &L,int n)//初始化并创建单链表 向链表里插入n个数
{if(!(L == 0)){printf("链表已初始化,无需重复操作!\n"); }else{L = (LNode*)malloc(sizeof(LNode));L->next = NULL;printf("初始化成功!\n");}LNode *p,*tail;tail = L;//尾插法 printf("请输入元素:"); for(int i = 0;i < n;i++){p = (LinkList)malloc(sizeof(LNode));scanf("%d",&(p->data));p->next = tail->next;tail->next= p;tail = p;}
}
void GetElem(LinkList L,int i,int &e)//所指位序的元素值
{LNode *p;p = L->next;int j = 1;while(p && j < i){p = p->next;++j;}if(!p || j > i)printf("获取失败!\n");else{e = p->data;printf("获取的值为:%d\n",e); }
}void GetPosition(LinkList L,int i)//所指元素值的位序(第一次出现的地方)
{LNode *p;p = L->next;int j = 0,flag = 0;while(p){while(p->data != i){p = p->next;if(p == NULL){flag = 1;break;}j++;}break;}if(flag == 0)printf("所指元素值的位序为:%d\n",j);elseprintf("未找到该元素值。\n");
}void ElemPrimer(LinkList L,int e)//求前驱
{LinkList p = L->next,q = p->next;while(q){if(e == q -> data){if(p)printf("所求前驱为:%d\n",p->data);elseprintf("该节点无前驱\n");return;}else{p = q;}q = p->next;}
}
void ElemNext(LinkList L,int e)//求后继
{int i = 0;LinkList p = L->next,q = NULL;while(p){if(e == p->data){q = p->next;if(p)printf("所求后继的值为:%d\n",q->data);elseprintf("该节点无后继\n");return;}elsep = p->next;i++;}
}void ElemInsert(LinkList L,int i,int &e)//插入数值
{LinkList p,s;p = L->next;int j = 1;while(p && j < i){p = p->next;j++;}if(!p || j > i){printf("插入失败!\n");}s = (LinkList)malloc(sizeof(LNode));s->data = e;s->next = p->next;p->next = s;printf("插入完成!\n");
}void LinkListDelete(LinkList &L,int i)//删除指定位置数值
{int j = 0,e;LNode *p,*q;p = L;while((p->next)&&(j < i-1)){p = p->next;j++;}if(!(p->next) || (j > i-1))printf("删除位置错误!\n");else{q = p->next;p -> next = q -> next;e = q -> data;free(q);printf("删除成功!\n");} }
void TraveList(LinkList L)//遍历输出
{LNode *p;p = L->next;while(p!=NULL){printf("%d ",p->data);p = p->next;}printf("\n");
}
int main()
{int n,t,e;LinkList L;L = 0;init();while(~scanf("%d",&n)){if(n == 1){InitList(L); }if(n == 2){DestoryList(&L);}if(n == 3){CountNode(L);} if(n == 4){if(L == 0)printf("链表未初始化!\n");else{printf("请输入需要获取元素的位置:");scanf("%d",&t);GetElem(L,t,e);}}if(n == 5){if(L == 0)printf("链表未初始化!\n");else{printf("请输入需要查找的元素的值:");scanf("%d",&t);GetPosition(L,t);}}if(n == 6){int e;if(L == 0)printf("链表未初始化!\n");else{printf("请输入需要求前驱的元素值:");scanf("%d",&e);ElemPrimer(L,e);}}if(n == 7){int e;if(L == 0)printf("链表未初始化!\n");else{printf("请输入需要求后继的元素值:");scanf("%d",&e);ElemNext(L,e);}}if(n == 8){int i,e;if(L == 0)printf("链表未初始化!\n");else{printf("请输入需要插入的位置和数字(一行,用空格隔开):");scanf("%d %d",&i,&e);ElemInsert(L,i,e);} }if(n == 9){int i;if(L == 0)printf("链表未初始化!\n");else{printf("请输入需要删除元素的位序:");scanf("%d",&i);LinkListDelete(L,i);}}if(n == 10){if(L == 0)printf("链表未初始化!\n");else{TraveList(L);}}if(n == 11){printf("请输入需要输入元素的个数:");scanf("%d",&t);CreatList(L,t);printf("输入完成!\n");}if(n == 12){printf("程序结束!\n");break;}}return 0;
}
三.顺序栈的基本操作
(1)实验目的
通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。
(2)实验内容
用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制。
(3)参考界面
(4)验收/测试用例
通过菜单调用各个操作,测试点:
- 没有初始化前进行其他操作,程序是否能控制住;
- 初始化一个栈;
- 判栈空,屏幕显示栈为空;
- 3个数入栈, 1、2、3;
- 栈长度,屏幕输出3;
- 取栈顶元素,再判栈空,然后再判栈长度。让学生知道取栈顶元素不改变栈中的内容,栈顶指针不发生改变;
- 出栈,再判栈长度;
- 销毁栈,再做其他操作,判断程序是否能控制
代码实现
#include <stdio.h>
#include <stdlib.h>
void i1();
void init();
const int Stacksize = 100,addsize = 10;
typedef struct{int *top;int *base;int stacksize;int length;
}SqStack;
int InitStack(SqStack &S)//1初始化
{S.base = (int *)malloc(Stacksize * sizeof(int));if(!S.base){printf("栈初始化失败!\n");return 0;}S.top = S.base;S.stacksize = Stacksize;S.length = 0;printf("栈初始化成功!\n");
}
int DestoryStack(SqStack &S)//2销毁
{if(S.base){free(S.base);S.base = NULL;S.top = NULL;S.stacksize = 0;printf("销毁成功!\n");return 1;}
}
int ClearStack(SqStack &S)//3置空
{if(S.base){S.top = S.base;printf("栈置空成功!\n");}elseprintf("栈已经为空\n");}
int Empty(SqStack &S)//4 判空
{if(S.top == S.base)return 1;elsereturn 0;
}
int Length(SqStack S)//5长度
{if(S.top == S.base){printf("栈为空!\n");}elseprintf("栈的长度为:%d\n",S.length);
}
int GetTop(SqStack &S)//6取栈顶元素
{if(S.top == S.base){return 0;}else{return *(S.top - 1);}
}
int Push(SqStack &S,int e)//7元素压入栈
{if(S.top - S.base >= S.stacksize){S.base = (int*)realloc(S.base,(S.stacksize + addsize)*sizeof(int));if(!S.base){printf("分配空间失败!\n");return 0;}S.top = S.stacksize + S.base;S.stacksize += addsize;}*S.top++ = e;S.length++;printf("插入成功!\n");
}
int DeleteStack(SqStack &S)//8删除栈顶元素并返回值
{if(S.base == S.top){printf("栈为空!\n");return 0;}printf("删除的栈顶元素为:%d\n",*(S.top-1));free(S.top-1);S.top--;S.stacksize--;printf("删除成功!\n");
}
int Pop(SqStack S)//9弹出栈内元素
{if(S.base == S.top){printf("栈为空!\n");return 0;}int *p = S.base;printf("栈内元素值为:\n");while(p != S.top){printf("%d ",*p);p++;}
}
void Initscanf(SqStack &S,int e)//10创建并输出
{int k;if(S.base)printf("栈已进行了初始化!\n");elseInitStack(S);printf("请输入%d个入栈元素:",e);for(int i = 0;i < e;i++){scanf("%d",&k);Push(S,k);}printf("\n");
}
int main()
{int n,e;SqStack S;S.base = 0; init();while(scanf("%d",&n)!=EOF){if(!S.base && n != 1 && n != 10 && n != 11){printf("栈未进行初始化!\n");continue;} if(S.base && n == 1){printf("栈已进行了初始化!\n");continue;}if(n == 1){InitStack(S);}if(n == 2){DestoryStack(S);}if(n == 3){ClearStack(S);}if(n == 4){if(Empty(S))printf("栈为空!\n");elseprintf("栈为非空!\n");}if(n == 5){Length(S);}if(n == 6){if(!GetTop(S))printf("栈为空!\n");elseprintf("栈顶元素为:%d\n",GetTop(S));}if(n == 7){printf("请输入需要压入栈的元素值:");scanf("%d",&e);Push(S,e); }if(n == 8){DeleteStack(S); }if(n == 9){Pop(S);printf("\n");}if(n == 10){printf("请输入需要入栈的元素个数:");scanf("%d",&e);Initscanf(S,e);}if(n == 11){printf("程序结束!");break;}}}
void i1()
{for(int i = 0;i < 20;i++)printf("*");
}
void init()
{for(int i = 0;i < 76;i++)printf("*");printf("\n");i1();printf(" 1.初始化为空栈\t\t\t");i1();printf("\n");i1();printf(" 2.销毁栈\t\t\t\t");i1();printf("\n");i1();printf(" 3.将栈置空\t\t\t\t");i1();printf("\n");i1();printf(" 4.判断栈是否为空栈\t\t\t");i1();printf("\n");i1();printf(" 5.返回栈的长度\t\t\t");i1();printf("\n");i1();printf(" 6.求栈顶元素\t\t\t");i1();printf("\n");i1();printf(" 7.插入元素,并使其成为栈顶元素\t");i1();printf("\n");i1();printf(" 8.删除栈顶元素,并返回其值\t\t");i1();printf("\n");i1();printf(" 9.输出栈内元素\t\t\t");i1();printf("\n");i1();printf(" 10.创建并输出入栈元素\t\t");i1();printf("\n");i1();printf(" 11.退出\t\t\t\t");i1();printf("\n");for(int i = 0;i < 76;i++)printf("*");printf("\n");printf("请输入选择:");
}
四.链队列的基本操作
(1)实验目的
通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。
(2)实验内容
用链式存储结构,实现教材定义的队列的基本操作。
(3)参考界面
(4)验收/测试用例
通过菜单调用各个操作,测试点:
- 没有初始化前进行其他操作,程序是否能控制住;
- 初始化一个队列;
- 判队列空,屏幕显示队列为空;
- 4个数入队, 1、2、3、5;
- 栈长度,屏幕输出4;
- 取队头元素,再判栈空,然后再判栈长度。让学生知道取队头元素不改变队列中的内容,队头指针不发生改变;
- 出队,再判栈长度;
- 销毁队,再做其他操作,判断程序是否能控制
代码实现
#include <stdio.h>
#include <stdlib.h>
void init();
typedef struct QNode{int data;QNode *next;
}QNode,*QPtr;
typedef struct{QPtr front;QPtr rear;int length;
}LinkQ;
int e;
int InitQueue(LinkQ &Q)//1初始化
{if(Q.front){printf("已进行过初始化!\n");}else{Q.front = Q.rear = new QNode;Q.front -> next = NULL;Q.length = 0;printf("初始化成功!\n");}
}
int DestoryQ(LinkQ &Q)//2队列销毁
{if(!Q.front){printf("队列未进行初始化!\n");}else{while(Q.front){Q.rear = Q.front->next;delete(Q.front);Q.front = Q.rear;}Q.front = 0;printf("队列销毁成功!\n");}
}
int ClearQ(LinkQ &Q)//3置空
{if(!Q.front){printf("队列未进行初始化!\n");}else{if(Q.front == Q.rear) printf("队列已经为空!\n");else{Q.front = Q.rear;Q.length = 0; printf("队列置空成功!\n");}}}
int EmptyQ(LinkQ &Q)//4判空
{if(!Q.front){printf("队列未进行初始化!\n");}else{if(Q.front == Q.rear){printf("队列为空!\n");}elseprintf("队列为非空!\n");}
}
int LengthQ(LinkQ &Q)//5元素个数
{if(!Q.front){printf("队列未进行初始化!\n");}else{printf("队列内元素的个数是:%d\n",Q.length);}
}
int GetTop(LinkQ Q)//6队头元素
{QNode *p;if(!Q.front){printf("队列未进行初始化!\n");}else{if(Q.front == Q.rear){printf("队列为空!\n");}else{p = Q.front->next;printf("队头元素为:%d\n",p->data);}}
}
int EnQ(LinkQ &Q)//7插入队头元素
{if(!Q.front){printf("队列未进行初始化!\n");}else{printf("请输入需要插入的元素值:");scanf("%d",&e);QNode *p = new QNode;p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;Q.length++;printf("插入成功!\n");}
}
int DeleteQ(LinkQ &Q)//8删除队头元素
{QNode *p;if(!Q.front){printf("队列未进行初始化!\n");}else{if(Q.front == Q.rear){printf("队列为空!\n");}else{p = Q.front->next;Q.front->next = p->next;//如果是最后一个 则为NULL if(Q.rear == p)Q.rear = Q.front;free(p);printf("删除成功!\n");}}
}
int InitCreateQ(LinkQ &Q)//9初始化并创建
{int k;InitQueue(Q);printf("请输入入队元素的个数:");scanf("%d",&e);printf("请输入%d个入队元素\n"); for(int i = 0;i <e;i++){scanf("%d",&k);QNode *p = new QNode;p->data = k;p->next = NULL;Q.rear->next = p;Q.rear = p;Q.length++;printf("插入成功!\n");}
}
int PrintQ(LinkQ Q)//10输出队列元素
{QNode *p;if(!Q.front){printf("队列未进行初始化!\n");}else{if(Q.front == Q.rear){printf("队列为空!\n");}else{p = Q.front->next;while(p != NULL){printf("%d ",p->data);p = p->next;}printf("\n");}}
}int main()
{int n;init();LinkQ Q;Q.front = 0;while(~scanf("%d",&n)){if(n == 1){InitQueue(Q);}if(n == 2){DestoryQ(Q);}if(n == 3){ClearQ(Q);}if(n == 4){EmptyQ(Q);}if(n == 5){LengthQ(Q);}if(n == 6){GetTop(Q);}if(n == 7){EnQ(Q);}if(n == 8){DeleteQ(Q); }if(n == 9){InitCreateQ(Q); }if(n == 10){PrintQ(Q);}if(n == 11){break;}}return 0;
}
void i1()
{for(int i = 0;i < 20;i++)printf("*");
}
void init()
{for(int i = 0;i < 76;i++)printf("*");printf("\n");i1();printf(" 1.初始化队列\t\t\t");i1();printf("\n");i1();printf(" 2.销毁队列\t\t\t\t");i1();printf("\n");i1();printf(" 3.清空队列\t\t\t\t");i1();printf("\n");i1();printf(" 4.判断队列是否为空\t\t\t");i1();printf("\n");i1();printf(" 5.返回队列中元素个数\t\t");i1();printf("\n");i1();printf(" 6.返回队列队头元素\t\t\t");i1();printf("\n");i1();printf(" 7.插入新的队尾元素\t\t\t");i1();printf("\n");i1();printf(" 8.删除队头元素\t\t\t");i1();printf("\n");i1();printf(" 9.初始化并创建队列\t\t\t");i1();printf("\n");i1();printf(" 10.输出队列元素\t\t\t");i1();printf("\n");i1();printf(" 11.退出\t\t\t\t");i1();printf("\n");for(int i = 0;i < 76;i++)printf("*");printf("\n");printf("请输入选择:");
}
数据结构实验整理(一)相关推荐
- 数据结构实验---最短路径C实现附带及简单界面
数据结构实验-最短路径C实现附带及简单界面 前言: 最短路径算法是图论中比较重要的算法之一,我们在课本中学到的最短路径算法有两种,分别为Dijkstra 算法 和 Floyd 算法,本文中采用的是 D ...
- 数据结构 实验三 栈的基本运算
栈的基本运算 任务一: 顺序栈的基本操作 任务描述: 本关任务:实现顺序栈的基本操作,包括栈的初始化.置空栈.进栈.出栈.判栈空.栈的输出(遍历)等. 相关知识: 为了完成本关任务,你需要掌握: - ...
- 数据结构实验之链表五:单链表的拆分-sdut
数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 输入N个 ...
- SDUT OJ 数据结构实验之排序一:一趟快排
数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descr ...
- sdut 3341数据结构实验之二叉树二:遍历二叉树
数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS Memory Limit: 65536K Problem Description 已知二叉树的一个按先序遍历输入的字符序列,如 ...
- sdut 2088 数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...
- sdut 2135 数据结构实验之队列一:排队买饭
数据结构实验之队列一:排队买饭 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descriptio ...
最新文章
- Android Studio下加入百度地图的使用 (一)——环境搭建
- python3.7正则表达式语法_python3正则表达式的几个高级用法
- 肝!一个非常好用的 Python 魔法库
- 安装SCOM Reporting Server
- sql 查出一张表中重复的所有记录数据
- 深入理解 Spring Boot Starters 原理(手写Spring boot Start)
- Activiti - 新一代的开源BPM引擎
- NET 4.0 System.Threading.Tasks学习笔记
- linux用于电脑,适用于 Linux的Windows子系统正在获得这些有用的新功能的介绍
- 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器)
- 一个朋友的精彩BLOG
- Java通过坐标点进行拟合函数
- YoungTalk-STM32入门100步-总篇
- 百词斩不复习_百词斩怎么复习,学好英语的前提条件是?
- javascript中的交互效果
- 【算法】动态规划之计算二项式系数(C++源码)
- 如何培养忠诚客户以及培养忠诚客户的重要性
- 宏观经济调控政策笔记+
- 随手记:银河麒麟创建自动挂载
- gaussdb 【FAQ_002】【gs_guc配置pg_hba.conf后不生效】