《线性表大作业任务书》由会员分享,可在线阅读,更多相关《线性表大作业任务书(10页珍藏版)》请在金锄头文库上搜索。
1、作业作业 1 1:线性表:线性表一、一、 作业目的作业目的1了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。2掌握线性表的顺序存储结构的定义及其 C 语言的实现。 3掌握线性表的链式存储结构单链表的定义及其 C 语言的实现。 4掌握线性表在顺序存储结构即顺序表中的各种基本操作。 5掌握线性表在链式存储结构单链表的各种基本操作。二、二、 作业要求作业要求1.认真阅读和掌握本实验的程序。 2.上机运行本程序。 3.保存和打印出程序的运行结果,并结合程序进行分析。 4.按照对线性表和单链表的操作需要,重新改写主程序并运行,打印出文 件清单和运行结果。三、三、 作业内容作业内容1. 顺
2、序表的操作 请编制 C 程序,利用顺序存储方式来实现下列功能:根据键盘输入数据建 立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行表的创 建,数据的插入删除并在插入和删除数据后再输出线性表;最后在屏幕菜单中 选择 0,即可结束程序的运行。分析:当我们要在顺序表的第 i 个位置上插入一个元素时,必须先将线性 表的第 i 个元素之后的所有元素一次后移一个位置,以便腾出一个位置,再把 新元素插入到该位置。当要删除第 i 个元素时,也只需将第 i 个元素之后的所有 元素前移一个位置。 算法描述:对每个算法,都要写出算法的中文描述。要求分别写出在第 i 个(从 1 开始计数)结点前插入数据
3、为 x 的结点、删除指定结点、创建一个线 性表。打印线性表等的算法描述。#include #includetypedef struct list int a20;int changdu;sqlist;void input(sqlist *l);void shuchu(sqlist *l);void del (sqlist *l);void xg (sqlist *l);void look(sqlist *l);void main()sqlist l;int k;while(1)printf(“1.输入 2.修改n“);printf(“3.删除 4.查找n“);printf(“5.输出 0.退出
4、n“);printf(“请输入功能代号“);scanf(“%d“,switch(k) case 1: input(break;case 2: xg(break;case 3: del (break;case 4: look (break;case 5: shuchu( break;case 0: exit(1);/输入void input(sqlist *l)int i=0;printf(“输入长度“);scanf(“%d“,while(ichangdu) scanf(“%d“,i+;/输出void shuchu (sqlist *l)int i=0;printf(“输出表n“);while(
5、ichangdu) printf(“%dn“,l-ai+1);i+;/查找void look (sqlist *l)int i;printf(“输入要查找的位置“);scanf(“%d“,if(i=0elseprintf(“输入有误“);/删除void del (sqlist *l) int i;printf(“输入要删除的位置“);scanf(“%d“,l-ai=l-ai+1;l-ai+1=l-ai+2;l-ai+2=0;/修改void xg(sqlist *l) int i;printf(“输入要修改的位置“);scanf(“%d“,if(i0scanf(“%d“,elseprintf(“
6、输入有误“);2.单链表的操作 请编制 C 程序,利用链式存储方式来实现线性表的创建、插入、删除和查 找等操作。具体地说,就是要根据键盘输入的数据建立一个单链表;然后根据 屏幕菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输 出单链表;最后在屏幕菜单中选择 0,即可结束程序的运行。 算法描述:要求分别写出在带头结点的单链表中第 i(从 1 开始计数)个位 置之后插入元素、创建带头结点的单链表、在带头结点的单链表中删除第 i 个 位置的元素、顺序输出单链表的内容等的算法描述。#include#includetypedef struct listint num;struct lis
7、t *next;list,*Llist;list *creat_head();/创建一?个?空?表void chuangjian(list *,int);/创建一?个?长度为an的?线?性?链表void charu(list *,int,int );/插?入?一?个?元a素?int shanchu(list *,int);/删?除y一?个?元a素?int chaxun(list *,int);/链表查询void print(list *);/打印?链表void main()list *head;int n,n2;/链表的?节点? 查询的?元a素?int x,i;/插?入?的?元a素? 插?入?
8、的?位?置?int b;/删?除y元a素?的?位?置?char temp;/删?除y整?个?链表Y/Nhead=creat_head();printf(“输?入?链表的?节点?个?数y:“);scanf(“%d“,printf(“n输?入?数y据Y:on“);chuangjian(head,n);/创建链表print(head);printf(“n-n“);printf(“n进?行D链表插?入?元a素?n“);printf(“n输?入?您需要a插?入?的?元a素?:“);scanf(“%d“,printf(“n输?入?即将?插?入?的?位?置?:“);scanf(“%d“,charu(head
9、,x,i);/插?入?元a素?print(head);printf(“n-n“);printf(“n进?行D链表删?除y元a素?n“);printf(“n输?入?即将?删?除y元a素?的?位?置?:“);scanf(“%d“,b=shanchu(head,i);/删?除y元a素?print(head);printf(“nn成功|删?除y元a素?:o%d“,b);printf(“n-n“);printf(“n进?行D链表查询n“);printf(“n输?入?即将?查询的?元a素?:“);scanf(“%d“,if(chaxun(head,n2)0)/链表查询printf(“找到?了?,?在第%d
10、的?位?置?上?“,chaxun(head,n2);elseprintf(“没?有D找到?!“);printf(“n-n“);printf(“n是?否?删?除y整?个?链表??Y/Nn“);fflush(stdin);scanf(“%c“,if(Y=temp)/删?除y链表shanchu(head,n2);printf(“n成功|删?除y整?个?链表n“);/创建一?个?空?链表list *creat_head()list *p;p=(Llist)malloc(sizeof(list);if(NULL=p)printf(“内存?申请?失败!?“);elsep-next=NULL;return(
11、p);/创建一?个?长度为an的?线?性?链表void chuangjian(list *head,int n)list *p,*q;int i;p=head;for(i=1;inum);q-next=NULL;p-next=q;p =q;/插?入?一?个?元a素?void charu(list *head,int x,int i )int j=0;list *p,*s;p=head;while(p!=NULL)j+;if(p=NULL) exit(0);s=(Llist)malloc(sizeof(list);if(NULL=p)printf(“内存?申请?失败!?“);elses-num=
12、x;s-next=p-next;p-next=s;/删?除y一?个?元a素?int shanchu(list *head,int i)list *p,*q;int j=0;int x;p=head;while(p!=NULL)j+;if(p=NULL) exit(0);q=p-next;p-next=q-next;x=q-num;free(q);q=NULL;return(x);/打印?链表void print(list * head)list *p;for(p=head-next;p!=NULL;)printf(“%d “,p-num);p=p-next;/链表查询int chaxun(list *head,int n)list *p;int i=1;for(p=head-next;p!=NULL;)if(n=p-num)return i;i+;p=p-next;if(NULL=p)return 0;