《计算机软件基础》实验一
admin
2024-04-30 12:47:13
0

实验一:线性表/栈与队

一、实验目的

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

二、实验要求

因受时间限制,从以下给出的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

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

printf("\n");

k = L.last-1;

while ((k>= 0) && (num

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

 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;

}

四、注意事项

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

五、实验总结和体会

相关内容

热门资讯

英国失业率升至近5年最高位 英国国家统计局2月17日发布的报告显示,由于经济增长乏力,2025年第四季度英国就业市场继续走软,失...
深夜全球资产大跌!纳指跌超1%... 每经编辑|陈柯名 美股开盘三大指数齐跌,道琼斯指数跌0.36%,标普500指数跌0.75%,纳斯达...
ST银江2025年预亏超17亿... 来源:经济观察网 经济观察网 基于最新公开信息,ST银江(股票代码:300020)有以下值得关注的事...
原创 特... 特朗普签令制裁古巴石油供应国,俄大使怒批“完全疯狂”:这记回马枪刺痛了谁? 背景:一纸行政令搅动加...
鹏扬基金总经理杨爱斌:2026... 岁序更新,骏马启程。值此2026马年新春佳节来临之际,谨向投资者朋友们致以诚挚的新春祝福,祝大家马年...
光大银行泰州分行被罚115万 近日,国家金融监督管理总局泰州监管分局发布了多张罚单,剑指光大银行股份有限公司泰州分行及其相关责任人...
伊朗宣布关闭霍尔木兹海峡部分区... 来源:21世纪经济报道 △伊朗伊斯兰革命卫队海军军演的主要阶段在霍尔木兹海峡展开 据伊朗方面17日...
新春守护不打烊 成都市场监管全... 春节假期开启,节日市场迎来消费高峰。近日,成都市各区(市)县市场监管局坚守监管一线,紧盯食品安全、价...
澳新银行:伦敦矿业股下跌,受价... 受金属价格下滑影响,伦敦矿业股早盘下跌。澳新 银行分析师写道,因美元走强打压了市场情绪,金价未能守住...
报告:凯德投资的私募基金业务可... 来源:滚动播报 大华继显的Adrian Loh在一份报告中称,凯德投资(CapitaLand Inv...
2025年AI落地进行时:企业... 今天分享的是:2025年AI落地进行时:企业业务、组织与人才升级实战案例集 报告共计:141页 20...
原创 中... 正当美国总统特朗普鼓吹“一日一赢”的神话时,一场美元霸权崩塌的前奏正在悄然演奏。截至今年1月份,美元...
俄罗斯石油神话正在崩塌:1.5... 王爷说财经讯:你敢信吗?2026年2月17日最新消息,足足1.5亿桶原油正漂在全球各大洋的油轮上,核...
景顺长城基金总经理康乐:主动有... 日月其迈,时盛岁新。农历马年来临,谨代表景顺长城基金,向广大投资者及所有支持和信任我们的朋友,致以最...
石家庄斜视怎么治疗?专业眼科医... 斜视带来的困扰 斜视不仅影响外观,还可能导致视力下降、立体视觉缺失等问题。比如孩子在学校看黑板、读书...
五天被三次约谈,高德地图怎么了... 来源:市场资讯 (来源:财闻) 借贷业务、火车票销售业务及网约车业务是高德被约谈的主要业务。 当前正...
金银价格大跳水 当地时间17日,全球多个主要市场因传统节日休市,贵金属市场交投清淡。 在美联储降息预期有所降温的背景...
消息称月之暗面新一轮超7亿美元... 2 月 17 日消息,据“科创板日报”报道,在完成上一轮 5 亿美元(现汇率约合 34.58 亿元人...
原创 春... 2026年春晚的钟声还未敲响,一场由机器人引发的消费飓风已提前登陆。当晚八点零七分,当《机械霓裳》节...
金价、银价,突然大跌! 继昨日下跌后,2月17日早上,现货金银再次双双急跌,现货黄金一度失守4980美元/盎司,日内跌超0....