本文绪上文线性表之顺序表(C实现)

本文将继续使用单链表实现线性表的另外一种存储结构.这种使用链表实现的存储结构在内存中是不连续的.

C实现代码如下:

 #include<stdio.h>

 typedef struct node
{
int data;
struct node *next;
}Node; //链表的初始化
Node* InitList(int number)
{
int i;
Node *pHead=(Node *)malloc(sizeof(Node));
Node *TempHead=pHead;
Node *Head=pHead;
int data;
for(i=;i<number;i++)
{
pHead=(Node *)malloc(sizeof(Node));
printf("Please input the %dst node data:\n",i+);
scanf("%d",&data);
pHead->data=data;
pHead->next=NULL;
TempHead->next=pHead;
TempHead=TempHead->next;
}
return Head;
} //显示链表
void ShowList(Node *Head)
{
Node *TempNode=Head;
Head=Head->next;
while(Head->next!=NULL)
{
printf("%d ",Head->data);
Head=Head->next;
}
printf("%d",Head->data);
printf("\n");
} //输出链表某个值的位置
int ListLocation(Node *Head,int data,int number)
{
Node *TempNode=Head;
int location=;
TempNode=TempNode->next;
while(TempNode->next!=NULL)
{
if(TempNode->data==data)
{
return location;
}
location++;
TempNode=TempNode->next;
}
if(location>=number)
printf("Not found!");
} //输出链表某个位置的值
int ListData(Node *Head,int location,int number)
{
if(location>number)
printf("Not found!"); Node *TempNode=Head;
TempNode=TempNode->next;
int i;
for(i=;i<=number;i++)
{
if(location==i)
return TempNode->data;
TempNode=TempNode->next;
}
} //头入法插入元素
void HeadInsertData(Node *Head,int data)
{
Node *InsertNode=(Node *)malloc(sizeof(Node));
InsertNode->data=data;
InsertNode->next=Head->next;
Head->next=InsertNode;
} //尾入插入除元素
void TailInsertData(Node *Head,int data)
{
Node *TempNode=Head;
Node *InsertNode=(Node *)malloc(sizeof(Node));
InsertNode->data=data;
while(TempNode->next!=NULL)
TempNode=TempNode->next; TempNode->next=InsertNode;
InsertNode->next=NULL;
} //删除头结点
void HeadDeleteData(Node *Head)
{
Head->next=Head->next->next;
} //删除尾结点
void TailDeleteData(Node *Head)
{
Node *TempNode=Head;
while(Head->next->next!=NULL)
Head=Head->next; Head->next=NULL;
} int main()
{
Node *Head;
int number;
printf("Please input the node number:\n");
scanf("%d",&number);
Head=InitList(number);
printf("The initital list is:\n");
ShowList(Head); int flag;
printf("\n\n");
printf("**********************Your Choice********************\n");
printf("****************1-输出链表某个值的位置***************\n");
printf("****************2-输出链表某个位置的值***************\n");
printf("****************3-头入法插入元素*********************\n");
printf("****************4-尾入法插入元素*********************\n");
printf("****************5-删除头结点*************************\n");
printf("****************6-删除尾结点*************************\n");
printf("****************0-退出*******************************\n");
printf("\n\n");
printf("Please input flag:\n");
scanf("%d",&flag); switch(flag)
{
case :
{
int data;
printf("Please input the data you want locate:\n");
scanf("%d",&data);
int location;
location=ListLocation(Head,data,number);
printf("The data's location is: %d",location);
break;
}
case :
{
int location;
printf("Please input the location you want data:\n");
scanf("%d",&location);
int data;
data=ListData(Head,location,number);
printf("The location's data is: %d\n",data);
break;
}
case :
{
int data;
printf("Please input the data you want insert in head:\n");
scanf("%d",&data);
HeadInsertData(Head,data);
ShowList(Head);
break;
}
case :
{
int data;
printf("Please input the data you want insert in tail:\n");
scanf("%d",&data);
TailInsertData(Head,data);
ShowList(Head);
break;
}
case :
{
HeadDeleteData(Head);
ShowList(Head);
break;
}
case :
{
TailDeleteData(Head);
ShowList(Head);
break;
}
case :
{
printf("You choose to exit.\n");
break;
}
}
return ;
}

结果图:

 

续上文----线性表之单链表(C实现)的更多相关文章

  1. 线性表之单链表C++实现

    线性表之单链表 一.头文件:LinkedList.h //单链表是用一组任意的存储单元存放线性表的元素,这组单元可以是连续的也可以是不连续的,甚至可以是零散分布在内存中的任意位置. //单链表头文件 ...

  2. [数据结构 - 第3章] 线性表之单链表(C++实现)

    一.类定义 单链表类的定义如下: #ifndef SIGNALLIST_H #define SIGNALLIST_H typedef int ElemType; /* "ElemType类型 ...

  3. 【Java】 大话数据结构(2) 线性表之单链表

    本文根据<大话数据结构>一书,实现了Java版的单链表. 每个结点中只包含一个指针域的链表,称为单链表. 单链表的结构如图所示: 单链表与顺序存储结构的对比: 实现程序: package ...

  4. 线性表 (单链表、循环链表-python实现)

    一.线性表 线性表的定义: 线性表是具有相同数据类型的有限数据的序列. 线性表的特点: 出了第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外有且只有一个后继. 线性表是一种逻辑结构,表示元 ...

  5. Java数据结构-线性表之单链表LinkedList

    线性表的链式存储结构,也称之为链式表,链表:链表的存储单元能够连续也能够不连续. 链表中的节点包括数据域和指针域.数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个 ...

  6. [C++]数据结构:线性表之(单)链表

    一 (单)链表 ADT + Status InitList(LinkList &L) 初始化(单)链表 + void printList(LinkList L) 遍历(单)链表 + int L ...

  7. 数据结构(java版)学习笔记(三)——线性表之单链表

    单链表的优点: 长度不固定,可以任意增删. 单链表的缺点: 存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针). 要访问特定元素,只能从链表头开始,遍历到该元素 ...

  8. 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】

    本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...

  9. 玩转C线性表和单向链表之Linux双向链表优化

    前言: 这次介绍基本数据结构的线性表和链表,并用C语言进行编写:建议最开始学数据结构时,用C语言:像栈和队列都可以用这两种数据结构来实现. 一.线性表基本介绍 1 概念: 线性表也就是关系户中最简单的 ...

随机推荐

  1. c3p0链接池

    频繁的链接数据库是非常消耗性能的,所以就采用了将一定量的链接保存在一个池中,这个池我们叫做链接池. 详细请看:http://baike.baidu.com/link?url=dlTW-fTS3N_-j ...

  2. POJ 3997 Stock Chase

    Stock Chase Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 455   Accepted: 131 Descrip ...

  3. 【转】android camera(四):camera 驱动 GT2005

    关键词:android  camera CMM 模组 camera参数  GT2005 摄像头常见问题 平台信息: 内核:linux系统:android 平台:S5PV310(samsung exyn ...

  4. sizeof用法

    c语言详解sizeof   原文地址:http://blog.sina.com.cn/s/blog_5da08c340100bmwu.html 一.sizeof的概念   sizeof是C语言的一种单 ...

  5. Handshakes(思维) 2016(暴力)

    Handshakes Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Sta ...

  6. 449A - Jzzhu and Chocolate 贪心

    一道贪心题,尽量横着切或竖着切,实在不行在交叉切 #include<iostream> #include<stdio.h> using namespace std; int m ...

  7. ASCII码表完整版

        ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 @ 96 . 1 SOH 33 ! 65 A 97 a ...

  8. [KMP][HDU3336][Count the string]

    题意 计算所有S的前缀在S中出现了几次 思路 跟前缀有关的题目可以多多考虑KMP的NEXT数组 #include <cstdio> #include <cstring> #in ...

  9. mysql 服务不见了的解决办法

    昨天打开电脑mysql突然连接不了了,去服务里找,却找不到mysql服务了 解决:5.0版本:开始->运行->cmd,进到mysql安装的bin目录D:\MySQL\bin>mysq ...

  10. Java学习——继承

    将学生工人的共性描述提取出来,单独进行描述,只要让学生和工人与单独描述的这个类有关系,就可以了. 继承:1,提高了代码的复用性.2,让类与类之间产生了关系.有了这个关系,才有了多态的特性. 注意:千万 ...