1、目录 一、实验题目 2 二、实验流程图 2 三、实验程序清单 5 四、实验验证数据 9 五、实验体会 10 实验一 线性表的建立与遍历 一、实验题目 1、给定一个输入序列,建立顺序表,访问输出顺序表中各结点的内容。 2、给定一个输入序列,建立线性链表,访问输出线性链表中各结点的内容。 二、实验流程图 1、顺序表的建立流程图 图1。1输入流程图 图1.2输出流程图 2、①链表头插法的建立及链表的输出 图1。3 链表输出 图1.4 头插法建立链表 ②尾插法建立
2、
图1.5尾插法建立
三、实验程序清单
1、/*顺序表的建立及遍历*/
#include 3、
scanf("%d",&a);
for(int i=0;i
#include 〈std 4、lib。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;
}
5、 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;
hea 6、d = p;
ch = getchar();
}
return head;
}
②/*链表尾插法建立及遍历*/
#include 7、t *h); //输出显示链表
int main(void)
{
int choice;
linklist *head;
//head = (linklist*)malloc(sizeof(linklist));
while(1)
{
printf("单链表的创建\n");
printf("1.使用带头结点的尾插法创建单链表");
printf(” ");
printf(”2。链表输出显示 ");
printf(" 8、 ");
printf("3。退出\n”);
printf("做出选择:\n”);
scanf(”%d”,&choice);
switch(choice)
{
//尾插法
case 1:
head = CreateList_End();
break;
//输出链表
case 2:
ShowLinklist(head); 9、
break;
//退出程序
case 3:
return 0;
break;
default:
break;
}
}
return 1;
}
linklist *CreateList_End()
{
char ch;
linklist *head, *s, *r;
head = (linklist*)ma 10、lloc(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; 11、
}
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 尾插法
五、实验体会
通过这次实验的练习,虽然在编程的过程中出现的一些小的错误,例如变量未定义,但是在自己不断的修正下,结果不断完善。通过这次实验让我更加明白一个顺序表怎么建立,先大体上估计一个数组的大小,自己来确定这个顺序表的长度,然后进行输出。在链表实验中还做了头插法和尾插法建立及遍历链表,通过实验结果可以更加明白,插法建立链表输出结果是逆序的,而尾插法建立链表输出结果是正序.






