数据结构实验一____单链表操作
2015-09-27 18:11
429 查看
实验要求:
1:初始化一个单链表,选择头插法和尾插法均可以。
2:向链表中插入新结点,或者删除某个结点。
3:打印单链表。
4:清空一个单链表。
代码如下:(最好自己写一遍)
1:初始化一个单链表,选择头插法和尾插法均可以。
2:向链表中插入新结点,或者删除某个结点。
3:打印单链表。
4:清空一个单链表。
代码如下:(最好自己写一遍)
#include<stdio.h> #include<malloc.h> #include<ctype.h> #include<string.h> #include<stdlib.h> typedef int T; //单链表的结点结构 typedef struct node* Nodeptr; typedef struct node { T date; //单链表的数据域 Nodeptr Link; //单链表的指针域 } Node; typedef Node* List; //定义单链表 //创建新链表,尾插 List BuildList1() { Node* first,*r; int n=0,i=0; T a; first=(Node*)malloc(sizeof(Node)); //申请表头结点 first->Link=NULL; //初始化一个空链表 r=first; //r始终指向最后一个结点,开始时指向表头结点 printf("请输入单链表元素的个数:\n"); scanf("%d",&n); printf("请输入%d个元素:\n",n); for(i=0; i<n; i++) { scanf("%d",&a); Node* p; p=(Node *)malloc(sizeof(Node));//申请新的结点 p->date=a; //结点数据域赋值 r->Link=p; //将结点插入链表尾部 r=p; //r始终指向最后一个结点 } r->Link=NULL; return first; } //创建新链表,头插 List BuildList2() { int n,i=0; Node* first; T a; first=(Node*)malloc(sizeof(Node));//申请表头结点 first->Link=NULL;//初始化一个空链表,first始终指向第一个结点 printf("请输入单链表元素的个数:\n"); scanf("%d",&n); printf("请输入%d个链表元素:\n",n); for(i=0; i<n; i++) { scanf("%d",&a); Node* p=(Node*)malloc(sizeof(Node));//申请一个新结点 p->date=a; p->Link=first->Link; first->Link=p; } return first; } //输出链表 void PrintList(List first) { Node* p; if(first==NULL) { printf("链表为空!\n"); return ; } printf("链表如下:\n"); p=first->Link; while(p!=NULL) { printf("%d ",p->date); p=p->Link; } printf("\n"); } //清空链表 void ClearList(List* first) { Node* p=*first; while(*first) { p=(*first)->Link; free(*first); *first=p; } } //删除链表中第一个值为X的元素,如果没有X,则什么都不做 void DeleteX(List lst,T X) { Node* p=NULL,*tmp; p=lst; while(p->Link!=NULL&&p->Link->date!=X) { p=p->Link; } if(p->Link!=NULL) { /*tmp=p->Link; p->Link=tmp->Link; free(tmp);*/ p->Link=p->Link->Link; } else { printf("没有符合条件的结点!\n"); } } //在链表的指定元素A后插入B,如果没有A,则插在链表尾部 void InsertB(List lst,T A,T B) { Node* p=NULL,*tmp; p=lst; tmp=(Node*)malloc(sizeof(Node)); tmp->date=B; tmp->Link=NULL; while(p->Link->Link!=NULL&&p->Link->date!=A) { p=p->Link; } tmp->Link=p->Link->Link; p->Link->Link=tmp; /* if(p->Link!=NULL) { tmp->Link=p->Link; p->Link=tmp; } else { tmp->Link=p->Link; p->Link=tmp; } */ } void main() { T a,b; List lst1,lst2; lst1=BuildList1(); PrintList(lst1); printf("请输入你要删除结点的元素(输入-1表示删除结束):"); while(scanf("%d",&a)&&a!=-1) { DeleteX(lst1,a); PrintList(lst1); } //PrintList(lst); ClearList(&lst1); PrintList(lst1); lst2=BuildList2(); PrintList(lst2); printf("请输入A和B:(输入0 0表示插入结束):"); while(scanf("%d%d",&a,&b),a+b) { InsertB(lst2,a,b); PrintList(lst2); } ClearList(&lst2); PrintList(lst2); }
相关文章推荐
- ACM题集以及各种总结大全!
- 数据结构实验1-顺序表-各种操作
- 数据结构------快排及另类快排思想解决问题
- [数据结构]二叉排序树
- 数据结构-线性表-栈-递归
- 数据结构 4____计算时间复杂度
- 数据结构,多项式运算,C++,链表
- 一元多项式的加减乘除运算,C++语言描述,数据结构实验
- [数据结构]Hash表初学(数组链表)
- 数据结构顺序栈的创建、初始化、出栈、入栈及销毁
- 数据结构基础 之 最长递增子序列
- (数据结构笔记)二叉查找树的实现
- 数据结构学习笔记——树
- 数据结构学习总结——预备知识
- 数据结构学习总结——数据结构概述
- 2,Add Two Number (LinkList Math)
- 1,Two sum (Hashtable Array)
- Java数据结构与算法之有序数组的插入和合并
- iOS —— JSON 数据结构及其解析方式
- 中国大学MOOC-陈越、何钦铭-数据结构-2015秋 03-树3 Tree Traversals Again (25分)