博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构基础——单链表顺序存储结构
阅读量:3938 次
发布时间:2019-05-23

本文共 3259 字,大约阅读时间需要 10 分钟。

单链表顺序存储结构的基本操作

实验内容:

  1. 单链表的整表创建。
  2. 单链表的第i个位置插入元素。
  3. 单链表的第i个位置删除元素。
  4. 单链表的按值查询。
  5. 单链表的整表输出。
  6. 单链表的整表删除。

SinglyLinkedList.h

/*单链表的建立*/#include 
#include
/****提供malloc、realloc、free、exit原型****/typedef struct LNode{
int number; /*数据域*/ struct LNode *next;c /*指针域*/}LNode;typedef LNode*LinkList /*指向单链表结点的指针*//************显示函数***************/void ShowAll(LinkList &L){
LinkList p; p = L->next; printf("链表显示如下:\n"); while(p){
//遍历表并显示每个结点 printf("%2d",p->number); p = p->next; } printf("\n"); printf("元素总数为:%d\n",L->number);}/***********初始化***********/void InitList(LinkList &L){
L = new LNode; L->next = NULL; L->number = 0; printf("单链表已经初始化!\n");}/************创建单链表***************/void CreatList(LinkList &L){
LinkList r,p; int choice; int n=0; char i; printf("请输入数据:\n"); r = L; do {
p = new LNode; scanf("%d",&p->number); p->next = NULL; r->next = p; r = p; n++; } while((i=getchar())!='\n'); L->number += n; printf("请问是否显示所有结点?1/是,2/否\n"); scanf("%d",&choice); if(choice == 1){
ShowAll(L); return; }else return;}/************根据位置查找**********/void GetElem(LinkList &L){
LinkList p; int i,j; p = L->next; j = 1; printf("请输入查找的位置->\n"); scanf("%d",&i); if(!p && j>i){
printf("输入错误,请重新输入\n"); GetElem(L); return; } while(p && j
next; j++; } printf("查找的元素为:%d\n",p->number); printf("是否继续?1/是 2/否\n"); scanf("%d",&i); if(i == 1){
GetElem(L); return; } else return;}/************根据结点信息查找*************/void Search(LinkList &L){
LinkList p; int i,e,j; p = L->next; j = 1; printf("请输入查找的信息->\n"); scanf("%d",&e); while(p && p->number != e){
p = p->next; j++; } if(!p) printf("没有你要查找的信息\n"); else {
printf("您要查找的元素为:%d\n",p->number); printf("第一次出现的位置在第%d个\n",j); } printf("是否继续?1/是 2/否\n"); scanf("%d",&i); if(i == 1) {
Search(L); return; } else return;}/***********插入函数*************/void ListInsert(LinkList &L){
LinkList s,e,p; int i,j; e = new LNode; p = L; j = 0; printf("请输入你要插入的位置->\n"); scanf("%d",&i); if(!p && j>i-1){
printf("输入错误,请重新输入:\n"); ListInsert(L); return; } printf("请输入要插入的信息->"); scanf("%d",&e->number); while(p && j
next; j++; } s = new LNode; s->number = e->number; s->next = p->next; p->next = s; L->number++; printf("请问是否显示所有结点?1/是,2/否\n"); scanf("%d",&i); if(i == 1){
ShowAll(L); return; }else return;}/*************删除指定位置的结点**************/void ListDelete(LinkList &L){
LinkList p,q; int i,j; printf("请输入要删除的位置->\n"); scanf("%d",&i); j = 1; p = L->next; if( !(p->next) || ( j>i-1)){
printf("输入错误,请重新输入:\n"); ListDelete(L); return ; } while((p->next) && (j
next; ++j; } q = p->next; p->next = q->next; free(q); L->number--; printf("请问是否显示所有结点?1/是,2/否\n"); scanf("%d",&i); if(i == 1){
ShowAll(L); return; }else return;}/*************清空单链表**************/void ClearList(LinkList &L){
LinkList q, p; p = L->next; while (p) {
q = p->next; free(p); p = q; } L->next = NULL; printf("整表已删除!!!\n"); return ;}

main.c

#include"SinglyLinkedList.h"void main(){
LinkList L; InitList(L); CreatList(L); GetElem(L); Search(L); ListInsert(L); ListDelete(L); ClearList(L); printf("Test Closure!!!\n");}

测试结果:

Test

转载地址:http://awywi.baihongyu.com/

你可能感兴趣的文章
linux中的网桥bridge
查看>>
linux中的teaming与bonding
查看>>
LVM
查看>>
用shell切分文件--split
查看>>
python中判断字符是否为中文
查看>>
Python - 利用zip函数将两个列表(list)组成字典(dict)
查看>>
python-全角转半角
查看>>
Python pass语句作用与用法
查看>>
Java double,float设置小数点位数
查看>>
PyCharm & Jupyter
查看>>
为什么要用Jupyter Notebook
查看>>
sklearn中的LogisticRegression模型
查看>>
pandas.get_dummies 的用法
查看>>
机器学习-训练模型的保存与恢复(sklearn)
查看>>
Spark(二): spark-submit命令详解
查看>>
细品 - 逻辑回归(LR)*
查看>>
hive: size与spilt连用
查看>>
Python:ModuleNotFoundError: No module named 模块名 错误及解决方案
查看>>
Python中os与sys两模块的区别
查看>>
nohup详解
查看>>