顺序链表的插入删除等操作 C语言

原创 2016年08月31日 15:57:14
//顺序表的操作
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//定义表的最大长度
#define MAXLEN 100
//定义结点的关键字
typedef struct  
{
char key[10];
char name[10];
int age;
}DATA;
//定义顺序表的结构
typedef struct  
{
DATA ListData[MAXLEN+1];
//表的长度
int Listlen;
}SLType;
//初始化顺序表
void SLInit(SLType *SL)
{
SL->Listlen=0;
//SL->ListData=0;
}
//求顺序表的长度
int SLLength(SLType *SL)
{
return (SL->Listlen);
}
//插入
int SLInsert(SLType *SL,int n,DATA data)
{
int i;
if(SL->Listlen>=MAXLEN)
{
printf("顺序表已满,不能插入结点!\n");
//返回
return 0;
}
if(n<1||n>SL->Listlen-1)
{
printf("插入元素错误,不能再插入元素!\n");
return 0;
}
for(i=SL->Listlen;i>=n;i++)
{
SL->ListData[i+1]=SL->ListData[i];
}
SL->ListData[n]=data;
//插入节点后长度增加1
SL->Listlen++;
return 1;
}
//增加元素到顺序表的尾部
int SLAdd(SLType *SL,DATA data)
{
if(SL->Listlen>=MAXLEN)
{
printf("线性表已经满了,不能再添加!\n");
return 0;
}
SL->ListData[++SL->Listlen]=data;
return 1;
}
//删除顺序表中某个数据元素
int SLDelete (SLType *SL,int n)
{
int i;
//删除失败
if(n<1||n>SL->Listlen+1)
{
printf("删除错误结点,不能删除!\n");
return 0;
}
//删除后顺序表中的数据前移
for(i=0;i<SL->Listlen;i++)
{
SL->ListData[i]=SL->ListData[i++];
}
SL->Listlen--;//元素个数减少1
return 1;


}
//根据序号返回数据元素
DATA *SLFindByNum(SLType *SL,int n)
{
if(n<1||n>SL->Listlen+1)
{
printf("结点序号错误\n");
return NULL;
}
//返回要查找的数据
return &(SL->ListData[n]);
}
//按照关键字查找数据
int SLFindByCont(SLType *SL,char *key)
{
int i;
for(i=1;i<=SL->Listlen;i++)
{
//如果找到所需的结点 就返回
if(strcmp(SL->ListData[i].key,key)==0)
{
//返回结点序号
return i;
}
//否则就没找到  ?
return 0;
}
//return 0;
}
//显示顺序表中的所有结点
int SLAll(SLType *SL)
{


int i;
for (i=1;i<=SL->Listlen;i++)
{
printf("(%s,%s,%d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);
}
return 0;
}
int main()
{
int i;
//定义顺序链表
SLType SL;
//结点保存数据
DATA data;
//结点保存指针
DATA *pdata;
//关键字
char key[10];
printf("顺序表操作演示:\n");
//初始化顺序表
SLInit(&SL);
printf("初始化顺序表完成!\n");
//循环添加结点
do 
{
printf("输入添加的结点(学号,姓名,年龄):");
//清空输入缓冲区
fflush(stdin);
scanf("%s%s%d",&data.key,&data.name,&data.age);
//跳出死循环
if(data.age)
{
//添加结点失败
if(!SLAdd(&SL,data))
{
break;
}
}
//跳出死循环
else
{
break;
}
} while (1);
printf("\n顺序表中的结点顺序为:\n");
//显示所有的数据
SLAll(&SL);
//清空缓冲区
fflush(stdin);
printf("\n要取出的结点的序号:");
//输入结点序号
scanf("%d",&i);
//按照序号查找结点
pdata=SLFindByNum(&SL,i);
//若返回的结点非空
if(pdata)
{
printf("第%d个结点为:(%d,%s,%d)\n",i,pdata->key,pdata->name,pdata->age);
}
//清空输入缓冲区
fflush(stdin);
printf("要查找的结点的关键字:\n");
scanf("%s",key);
i=SLFindByCont(&SL,key);
//按序号查找,返回结点指针
pdata=SLFindByNum(&SL,i);
if(pdata)
{
printf("第%d个结点为:(%s,%s%d)\n",pdata->key,pdata->name,pdata->age);
getchar();
return 0;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

【C语言】 链表 单链的建立,节点增加 删除 顺序插入

上一篇的升级版 #include #include struct bookdata{ int book; struct bookdata *next; };  /* 打印链表 */  ...
  • hqweay
  • hqweay
  • 2016年11月12日 18:53
  • 902

C语言实现链表的创建,初始化,插入,删除,查找

#include #include #define OK 0 #define ERROR -1 #define MALLOC_ERROR -2 typed...
  • BiuBiu741
  • BiuBiu741
  • 2016年12月04日 21:15
  • 1044

C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。

C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。...
  • liu_if_else
  • liu_if_else
  • 2015年10月01日 16:09
  • 938

链表的基本操作(C语言版):建立,插入,删除,查找,输出

//1、链表的基本操作(不带头结点)//**的含义把握不准确,要认真研究练习 #include #include typedef struct list { int data; struc...
  • xiaohuizi2009
  • xiaohuizi2009
  • 2013年03月04日 12:44
  • 5872

单链表插入和删除结点c语言的实现

个人学习的一些笔记,如果有误,希望指正
  • mango_haoming
  • mango_haoming
  • 2017年03月10日 11:22
  • 2003

常见算法:C语言中链表的操作(创建,插入,删除,输出)

链表中最简单的一种是单向链表,它包含两个域,一个信息域和一个指针域。这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值。 一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链...
  • iwm_NeXT
  • iwm_NeXT
  • 2012年04月11日 18:22
  • 23724

C语言实现链表的插入、删除、查询操作

前言本程序是数据结构上机实验内容,参考《数据结构(C语言版)》(清华大学出版社)中链表部分的伪代码实现。题目要求 设计链表结构体 建立一个链表,并录入n个原始数据 实现向链表中指定位置插入数据的功能 ...
  • lgj123xj
  • lgj123xj
  • 2017年05月08日 13:09
  • 946

C语言实现链表节点的插入和删除

http://www.cnblogs.com/scrat/archive/2012/08/17/2644086.html 今天我实现的是插入链表节点和删除链表节点。 看代码吧,...
  • jeffasd
  • jeffasd
  • 2016年06月07日 11:09
  • 934

单链表的顺序插入、删除、查找/code/c&c++

#include #include #define MAXLEN 20 typedef struct node { int data; node * next; }nod...
  • baidu_36757829
  • baidu_36757829
  • 2016年11月23日 19:11
  • 358

C语言实现单链表的创建、插入、删除

节点数据结构: /* *定义链式存储线性表的结构 */ typedef struct LNode { int data; //数据域 struct LNode * nex...
  • qlzx_syzx
  • qlzx_syzx
  • 2017年11月29日 18:04
  • 164
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:顺序链表的插入删除等操作 C语言
举报原因:
原因补充:

(最多只允许输入30个字)