数据结构与算法-实验1链表的建立与操作
实验目的: 掌握链表数据结构的建立及操作
实验重点: 利用链表的原空间进行链表的反转
实验内容:设计一个将输入数据建立成链表、并依次输出链表数据、利用原空间把链表反转的程序。
实验步骤:
- 掌握链表的数据结构
- 建立空链表
- 用头插法向链表插入数据,实验数据:
验证数据:20,20,17,16,15,15,11,10,8,7,7,5,4 - 依次输出链表中的数据
- 利用链表原空间进行对链表进行反转
- 依次输出反转后的链表数据,以判断反转操作的正确性,注意反转后,链表的第一个和最后一个元素是否正确
7,进阶要求:删除无序链表的重复元素。
实验提示:
见ppt
程序流程图:

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct Number{
int num;
}Num;
typedef struct NumNode{
Num number;
struct NumNode*pNext;
}Node;
Node *g_head=NULL;
Node *prev = NULL;
void inputnumber();
void printnumber();
void reverse();
void dele();
void freelink();
int main(){
while(1){
int n;
printf("请选择功能\n");
printf("1.输入链表数据\n");
printf("2.反转链表\n");
printf("3.删除链表相同元素\n");
printf("4.输出链表数据\n");
scanf("%d",&n);
if(n==1)
inputnumber();
else if(n==2)
reverse();
else if(n==3)
dele();
else if(n==4)
printnumber();
}
void freelink();
return 0;
}
void inputnumber(){
int q,i=0;
printf("请输入链表元素个数:");
scanf("%d",&q);
while(i<q){
//头插法建立空链表
Node* pnewNode=(Node*)malloc(sizeof(Node));
scanf("%d",&pnewNode->number.num);
pnewNode->pNext=g_head;
g_head=pnewNode;
i++;
}
printf("\n");
system("pause");
}
void printnumber(){
Node *p=g_head;
while(p!=NULL){
printf("%d ",p->number.num);
p=p->pNext;
}
//printf("%d",g_head->number.num);
printf("\n\n");
system("pause");
}
void reverse(){
Node *curr =g_head;
while (curr != NULL) {
Node *nextTemp = curr->pNext;
curr->pNext = prev;
prev = curr;
curr = nextTemp;
}
g_head=prev;
printf("链表反转成功\n\n");
system("pause");
}
void dele(){
Node *p=g_head,*q=NULL,*r=NULL,*t=NULL;
while(p!=NULL){
q=p;
r=q->pNext;
while(r!=NULL){
if(r->number.num==p->number.num){
t=r;
r=r->pNext;
q->pNext=r;
free(t);
}
else{
q=r;
r=r->pNext;
}
}
p=p->pNext;
}
printf("删除相同元素成功\n\n");
system("pause");
}
void freelink(){
Node *p;
while(g_head!=NULL){
p=g_head;
g_head=p->pNext;
free(p);
}
}
运行结果及分析:

头插法进行链表元素的输入,然后输出链表,对链表进行反转,然后输出,对链表进行相同元素的删除和内存的释放,然后输出。

头插法进行链表元素的输入,然后输出链表,对链表进行相同元素的删除和内存的释放,然后输出。对链表进行反转,然后输出。
心得体会:
对C语言的链表进行深刻复习,进一步加强了链表的建立和删除与反转,而且对链表的结构和算法进行深度学习,对算法有了初步的学习,得以加强。

浙公网安备 33010602011771号