顺序链表的插入删除等操作 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语言之数据结构的顺序单链表创建,插入和删除操作

数据结构上机课时敲的。。之前用C++实现过简单的三元组,,但没有用C语言实现。所以试了试,课本上的参数传递都是用的引用的形式,而如果要用C语言实现的话就都需要改为指针传递的形式。 下面有一个重点就是删...
  • sxtopc
  • sxtopc
  • 2016年09月18日 22:47
  • 263

单链表顺序存储相关操作的c语言实现

单链表顺序存储相关操作的c语言实现,实现了初始化,创建,查找,删除,定位还有两个链表的合并....

SqListFunc顺序链表的12个基本操作的C语言代码(数据结构)

#include #include // exit() typedef int ElemType; typedef int Boolean; // Boolean是布尔类型,其值是TRUE或...

用c语言实现顺序表与单链表的部分操作

初学数据结构,用C语言实现了顺序表和单链表的一些操作,纯手打原创,希望大牛指出错误,感激不尽...

c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现

#include #include #define LIST_INIT_SIZE 100 #define LIST_INCREMENT 10 using namespace std; struct S...

C语言实现顺序表的插入、删除、查找、遍历等基本操作

C语言实现顺序表的插入、删除、查找、遍历等基本操作 /*编写完整的程序实现顺序的建立、查找、插入、删除等基本操作*/ #include #include #define LIST_INIT_SIZ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:顺序链表的插入删除等操作 C语言
举报原因:
原因补充:

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