资源描述
目录
一、实验题目 2
二、实验流程图 2
三、实验程序清单 5
四、实验验证数据 9
五、实验体会 10
实验一 线性表的建立与遍历
一、实验题目
1、给定一个输入序列,建立顺序表,访问输出顺序表中各结点的内容。
2、给定一个输入序列,建立线性链表,访问输出线性链表中各结点的内容。
二、实验流程图
1、顺序表的建立流程图
图1。1输入流程图 图1.2输出流程图
2、①链表头插法的建立及链表的输出
图1。3 链表输出 图1.4 头插法建立链表
②尾插法建立
图1.5尾插法建立
三、实验程序清单
1、/*顺序表的建立及遍历*/
#include <stdio.h〉
typedef struct{
int data[100];
int length;
}Seqlist;
void creat(Seqlist &L);
void show(Seqlist L);
int main()
{
Seqlist L;
L。length=0;
creat(L);
show(L);
return 0;
}
void creat(Seqlist &L)
{
int a;
printf("请输入要创建的元素的个数:\t”);
scanf("%d",&a);
for(int i=0;i<a;i++)
{
printf("请输入第%d个元素\t",i+1);
scanf(”%d”,&L.data[i]);
L。length++;
}
}
void show(Seqlist L)
{
int i;
printf("线性表中的元素为:\n”);
for(i=0;i<L。length;i++)
printf("%d\t",L.data[i]);
printf(”\n”);
}
2、
①/*头插法链表的建立*/
#include <stdio。h>
#include 〈stdlib。h>
typedef struct node
{
char data;
struct node *next;
}JD;
JD *CreateList_Front();
int main()
{
JD *head,*p;
head=CreateList_Front();
p = head;
while(p != NULL)
{
printf("%c ", p->data);
p = p-〉next;
}
printf("\n”);
}
JD *CreateList_Front()
{JD *head, *p;
char ch;
head = NULL;
printf(”依次输入字符数据(‘#’表示输入结束):\n”);
ch = getchar();
while(ch != ’#’)
{
p = (JD*)malloc(sizeof(JD));
p->data = ch;
p—〉next = head;
head = p;
ch = getchar();
}
return head;
}
②/*链表尾插法建立及遍历*/
#include <stdio.h〉
#include <stdlib.h〉
typedef struct link
{
char data;
struct link *next;
}linklist;
linklist *CreateList_End(); //尾插法创建单链表
void ShowLinklist(linklist *h); //输出显示链表
int main(void)
{
int choice;
linklist *head;
//head = (linklist*)malloc(sizeof(linklist));
while(1)
{
printf("单链表的创建\n");
printf("1.使用带头结点的尾插法创建单链表");
printf(” ");
printf(”2。链表输出显示 ");
printf(" ");
printf("3。退出\n”);
printf("做出选择:\n”);
scanf(”%d”,&choice);
switch(choice)
{
//尾插法
case 1:
head = CreateList_End();
break;
//输出链表
case 2:
ShowLinklist(head);
break;
//退出程序
case 3:
return 0;
break;
default:
break;
}
}
return 1;
}
linklist *CreateList_End()
{
char ch;
linklist *head, *s, *r;
head = (linklist*)malloc(sizeof(linklist));
r=head;
printf("请依次输入字符数据(’#'表示输入结束):\n”);
ch = getchar();
while(ch != ’#')
{
s = (linklist*)malloc(sizeof(linklist));
s->data = ch;
r—〉next=s;
r=s;
ch=getchar();
}
r-〉next = NULL;
return head;
}
void ShowLinklist(linklist *h)
{
linklist *s;
s = h;
while(s != NULL)
{
printf(”%c ", s-〉data);
s = s->next;
}
printf(”\n");
}
四、实验验证数据
1、顺序表的建立及输出结果如下:
图1。6 顺序输出
2、链表头插法建立及遍历,结果如下:
图1。7 头插法
3、链表尾插法的建立及遍历,结果如下:
图1。8 尾插法
五、实验体会
通过这次实验的练习,虽然在编程的过程中出现的一些小的错误,例如变量未定义,但是在自己不断的修正下,结果不断完善。通过这次实验让我更加明白一个顺序表怎么建立,先大体上估计一个数组的大小,自己来确定这个顺序表的长度,然后进行输出。在链表实验中还做了头插法和尾插法建立及遍历链表,通过实验结果可以更加明白,插法建立链表输出结果是逆序的,而尾插法建立链表输出结果是正序.
展开阅读全文