实验一:线性表/栈与队

一、实验目的

了解实现线性表/栈与队/数组所涉及到的数据结构。

二、实验要求

因受时间限制,从以下给出的4个实验内容中任选3个,分析并补齐给出的源程序,运行相应的程序,检验运行结果,以此巩固对相应部分的理论知识的理解。

1.复习线性表、栈与队列的定义,理解顺序存储、链式存储的方法及基本操作。

2.复习C语言中数组、指针及结构体的概念、定义方式。

3.上机前准备好全部源程序。

4.计算机中需要安装vc6.0或vs2010。

5.程序中所用结构体定义于datastru.h中。

三、实验内容

熟悉vs2010环境下建立程序源文件与调试程序的流程。

1、完成有序表(顺序表)中插入一元素并保证仍然有序。

……(补充程序)

void main( )

{

SEQUENLIST  L;

int num,i,k,x;

L.last=0;   //置顺序表为空,表长为0

printf("请输入顺序表元素,元素为整型量,用空格分开,-99为结束标志:");

/*输入顺序表元素,建立有序表,值从小到大*/

scanf("%d",&num);

while (num !=-99) {

………(补充程序)

L.last++;

scanf("%d",&num);

}

printf("%d",L.last);

printf("输入要插入的元素值(整型) : ");

scanf("%d",&num);

printf("\n插入前有序表元素列表 :");

for (i=0; i<L.last; i++)

printf("%4d",L.datas[i]);

printf("\n");

k = L.last-1;

while ((k>= 0) && (num<L.datas[k])) /*查找插入位置i  */

k--;

for(i=L.last-1; i>=k+1; i--)

L.datas[i+1]=L.datas[i];  /*移动元素  */

L.datas[k+1]=num;                                     /*新元素插入*/

L.last++;                                             /*表长加1 */

printf("\n插入后有序表元素列表 :");

for (i=0; i<L.last; i++)

printf("%4d",L.datas[i]);

printf("\n");

}

2、完成链表的结点插入、删除操作,并显示操作前后的线性表中各元素的情况。

……(补充程序)

void inser_order(DATATYPE2 x, LINKLIST *head){

LINKLIST *pr, *pn, *pp;

pr = head; pn = head->next;

while(pn != NULL && pn->data < x)

{

……(补充程序)

}

pp = (LINKLIST *)malloc(sizeof(LINKLIST));

……(补充程序)

}

int count_head(LINKLIST *head)     /*输出单链表元素值并计数*/

{

int i = 0;

LINKLIST *p;

p = head->next;

printf("输出单链表元素值 : ");

while(p != NULL)

{

……(补充程序)

}

printf("\n");

return i;

}

LINKLIST *creatlink_order_head(LINKLIST *head)   /*建立带头结点的有序单链表*/

{

LINKLIST *t, *p, *q;

char ch;

t = (LINKLIST *)malloc(sizeof(LINKLIST));   //建立带头结点的空链表

t->next = NULL;

head = t;

printf("单链表元素值为单个字符, 连续输入,#为结束字符  : ");

while ((ch = getchar()) != '#')

{

……(补充程序)

}

return head;

}

int main()

{

LINKLIST *head = NULL;

int  num;

char ch;

printf("\n    建立单链表\n\n");

head = creatlink_order_head(head);

num = count_head(head);

printf("单链表元素个数 = %d\n", num);

fflush(stdin);

printf("\n输入插入元素值 : ");

ch = getchar();

inser_order(ch, head);

printf("\n    元素插入后\n\n");

num = count_head(head);

printf("插入后单链表元素个数 = %d\n", num);

return 1;

}

3、运用栈完成十进制数与八进制数的转换。

……(补充程序)

void initstack(SEQSTACK *s)   /*顺序栈初始化*/

{

……(补充程序)

}

DATATYPE1 gettop(SEQSTACK *s) /*返回栈顶元素*/

{

DATATYPE1  x;

……(补充程序)

return x;

}

int push(SEQSTACK   *s,  DATATYPE1  x)  /*元素x入栈*/

{

if(s->top == MAXSIZE-1)

{

……(补充程序)

}

else

{

……(补充程序)

return 1;

}

}

DATATYPE1 pop(SEQSTACK *s)    /*返回栈顶元素并删除栈顶元素*/

{

DATATYPE1  x;

if(s->top == 0)

{

printf("栈空\n");

x=0;

}

else

{

……(补充程序)

}

return  x;

}

int main( )

{

SEQSTACK stack, *s;

int  n;

s = &stack;

initstack(s);

n = 0;

printf("输入一非负整数(十进制) :");

scanf("%d",&n);

push(s,'#');

while(n != 0)

{

push(s, n % 8);         /* %为求余数运算符, 余数入栈*/

n = n / 8; /* /为求整数商运算符,商不为零,继续运行*/

}

printf("\n\n对应的八进制数为 :");

while(gettop(s) != '#')

printf("%d",pop(s));

printf("\n");

return 1;

}

4、实现带头结点链队元素的删除、插入操作,并显示操作前后的队列情况。

……(补充程序)

DATATYPE1 dellinkqueue(LINKQUEUE *q)    /*删除队头元素并返回*/

{

……(补充程序)

if(q->front == q->rear)

{

printf("队列空\n");

v = 0;

}

else

{

……(补充程序)

}

return v;

}

void enlinkqueue(LINKQUEUE *q, DATATYPE1 x)  /*元素x 入队列*/

{

(q->rear)->next = (LINKQLIST *)malloc(sizeof(LINKQLIST));

……(补充程序)

}

void initlinkqueue(LINKQUEUE *q)  /*链队列初始化*/

{

……(补充程序)

}

void outlinkqueue(LINKQUEUE *q)     /*链队列元素依次显示*/

{

LINKQLIST *p;

p = q->front;

printf("队列元素显示 : ");

while(p != q->rear)

{

……(补充程序)

}

printf("\n");

}

int main()

{

LINKQUEUE lq, *p;

int j;

p = &lq;

initlinkqueue(p);

printf("输入一整数(奇数——入队列、偶数——删除队头元素、0——退出) : ");

scanf("%d", &j);

while(j != 0)                    /*输入 0——退出*/

{

if(j % 2 == 1)

enlinkqueue(p,j);            /*输入奇数——入队列*/

else

j = dellinkqueue(p);          /*输入偶数——删除队头元素*/

outlinkqueue(p);

printf("\n输入一整数(奇数——入队列、偶数——删除队头元素、0——退出) : ");

scanf("%d", &j);             /*继续输入*/

}

return 1;

}

四、注意事项

注意程序中用到的结构体的来源及表示方法、调用方式。读懂程序结构,先补齐缺失代码,再调试运行程序。

五、实验总结和体会

《计算机软件基础》实验一相关推荐

  1. linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...

  2. linux内核分析 网络九,“Linux内核分析”实验报告(九)

    一 Linux内核分析博客简介及其索引 本次实验简单的分析了计算机如何进行工作,并通过简单的汇编实例进行解释分析 在本次实验中 通过听老师的视频分析,和自己的学习,初步了解了进程切换的原理.操作系统通 ...

  3. Linux内核分析实验3——分析linux内核启动过程

    本文大量内容引用自孟宁老师在<LINUX操作系统分析>课程中的内容 <Linux内核分析>MOOC课程 http://www.xuetangx.com/courses/cour ...

  4. linux内核分析实验三,linux内核分析第三次实验

    WIN10 CMD 启动虚拟WIFI 1.以管理员身份运行命令提示符: 快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡: 运行命令:netsh wlan set hostednet ...

  5. 《Linux内核分析》实验一

    陈智威,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课堂学习笔记: 作业截图: 汇编代码堆栈分析: ...

  6. Linux 内核分析 之一:How Computer Works 实验

    说明 欧长坤 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期学校恰好有操 ...

  7. Linux内核实验孟宁,《linux内核分析》实验二:时间片轮转多道程序运行原理

    一.概述 本文通过分析一个简单的时间片轮转多道程序的内核 mykernel,来理解操作系统是如何工作的. mykernel 是孟宁老师的一个开源项目,借助 Linux 内核部分源代码模拟存储程序计算机 ...

  8. Linux内核分析——可执行程序的装载

    链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可 ...

  9. LINUX内核分析第二周学习总结——操作系统是如何工作的

    LINUX内核分析第二周学习总结--操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  10. Linux内核分析作业第二周

    操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...

最新文章

  1. Android之Log工具类使用
  2. StoryBoard概览
  3. Re: 从零开始的【comic spider】(序幕)
  4. JAVA浮点数使用陷阱:2.7 和 8.1 / 3 比较
  5. [Phoenix] 十、全局索引设计实践
  6. 【BZOJ3437】小P的牧场,斜率优化DP
  7. 2020 CTF暑假夏令营培训Day1 安全杂项Misc
  8. keras cnn注意力机制_2019 SSA-CNN(自注意力机制)目标检测算法论文阅读笔记
  9. oracle data guard三种,Oracle Dataguard三种保护模式概述
  10. c++全局变量,局部变量,内存布局,默认初始化
  11. 电子设计从零开始_第二版(1)
  12. 毕向东Mysql教程_传智播客_毕姥爷_2012年毕向东Java基础教程_毕向东老师
  13. 台湾移动互联网为什么跑慢了?
  14. APP应用测试要点。。。。我知道的就这么多
  15. 吃透 Vue 项目开发实践|16个方面深入前端工程化开发技巧【上】
  16. Database:MySQL
  17. 高效能力人士必知必会的搜索引擎高级使用技巧
  18. 思博伦报告:伴随运营商寻求差异化优势,5G发展不断加速
  19. page_fault_in_nonpaged_area(win32k.sys)错误解决方法
  20. 了解GPIO端口的初始化设置三步骤LED流水灯C语言 寄存器方式编程实现

热门文章

  1. 程序猿思维释放:打破常态
  2. 常见挖矿病毒处理方法(qW3xT/Ddgs.3011/S01wipefs/acpidtd/MSFC)
  3. Mencoder安装编译手册
  4. 完美的word转pdf
  5. Linaro公司基于GCC推出的的ARM交叉编译工具
  6. 进入职场瓶颈期?3步摆脱“毛毛虫效应”,不做悲剧的“跟随者”
  7. 装windows操作系统教程
  8. 杰理-AC632x开发之usb无法下载问题和原因
  9. 手机拍摄全景图并且使用Threejs实现VR全景,超简单WebVR
  10. 记录chrome 浏览器 本地ip 地址报 CORS 错误