中易网

请高手帮我写一份数据结构关于线性表插入的源程序,非常感谢

答案:5  悬赏:60  
解决时间 2021-11-15 02:10
关于数据结构线性表插入的问题,比如说有一个一维数组,a[5]={0,1,2,3,4,5},在2的前面插入一个数的源程序,谢谢!
最佳答案
不知道符合你的想法不?
#include<stdio.h>
#include<malloc.h>
typedef struct lnode{
int data;
struct lnode *next;
}lnode,*linklist;
//创建表
void create(linklist &l){
linklist p;
l=(linklist)malloc(sizeof(lnode));
l->next=NULL;
for( int i=6;i>0;--i){
p=(linklist)malloc(sizeof(lnode));
scanf("%d",&p->data);
p->next=l->next;
l->next=p;
}
}
//插入元素
int insert(linklist &l,int i,int e){
linklist p,s;
int j=0;
p=l;
while(p&&j<i-1){
p=p->next;++j;
}
if(!p||j>i-1) return 0;
s=(linklist)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
//输出元素
void print(linklist l)
{
linklist p;
p=l->next;
while (p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
//删除表
int destroy(linklist &l)
{
linklist p;
while (l)
{
p=l;
l=l->next;
free(p);
}
return 1;
}
void main(){
linklist l;
printf("输入六个数:\n");//就输入你说的012345
create(l);
printf("表中的元素为:\n");
print(l);//输出的是543210
int d,e;
printf("输入要插入的位置及要插入的数字:\n");
scanf("%d%d",&d,&e);//这样可以在任意位置插入你想插入的数字
insert(l,d,e);
print(l);
destroy(l);
}
全部回答
我暂时保留我的看法!
百度搜索CSDN,里面不光线性表,队列什么的代码都有
实验题目: 线性表的基本操作 实验环境: Visual C++ 实验目的:1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 实验内容:建立一个包含图书(书号,书名,定价)信息的的链表,并具有如下功能: (1) 根据指定图书个数,逐个输入图书信息; (2) 根据书名进行查找,返回此书的书号和定价; (3) 根据指定的位置可返回相应的图书信息(书号,书名,定价); (4) 给定一个图书信息,插入到表中指定的位置; (5) 删除指定位置的图书记录; (6) 统计表中图书个数。 程序如下我写的非常完善,建立、查找、插入和删除都有 —————————————————————————————————— #include <malloc.h> #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #define len sizeof(Book) typedef struct Book{ char no[8]; //8位书号 char name[20]; //书名 char price[8]; //定价 struct Book *next; }Book; Book *L; int b1,n1; void CreateList(){ int i,n; Book *p,*q; if(!b1){ L=(Book*)malloc(len); L->next=NULL; //生成只包含头结点的空链表 b1=1; n1=0; p=L; printf("要输入的图书数为:"); scanf("%d",&n); for(i=1;i<=n;i++){ //通过n控制输入图书数 q=(Book*)malloc(len); printf("请输入第%d个图书信息:\n",i); printf("书号:"); scanf("%s",q->no); printf("书名:"); scanf("%s",q->name); printf("定价:"); scanf("%s",q->price); q->next=L->next;L->next=q; n1=n1+1; } }else {printf("已输入完毕,请插入信息!"); //每次执行程序只能生成一次链表,之后只能进行插入、删除操作 getch();} } void FindBook(){ char ch[20]; int s2=0; Book *p; p=L->next; printf("请输入图书名:"); scanf("%s",ch); while(p){ if(strcmp(p->name,ch)==0) //判断和查询图书名是否相等 {printf("图书名:%-12.9s 书号:%-12.10s 定价:%s",p->name,p->no,p->price); //控制字符串输出的长度、格式 s2=1; getch();} p=p->next; } if(!s2) { printf("没有该图书信息!"); getch();} } void Getlocation(){ Book *p ; int i,j; p=L->next; //初始化,p指向第一个结点 j=1;// j为计数器 printf("请输入位置:"); scanf("%d",&i); while(p && j<i){ p=p->next; ++j; } if(!p||j>i) printf("ERROR"); //i大于表长或小于1 printf("图书名:%-12.9s 书号:%-12.10s 定价:%s",p->name,p->no,p->price); getch(); } void ListInsert(){ int j,i; Book *p,*s; p=L;j=0; printf("请输入位置:"); scanf("%d",&i); while (p&&j<i-1) {p=p->next;++j;} if(!p||j>i-1) printf("error"); s=(Book*)malloc(len); //生成新结点 printf("请输入新的图书信息:\n"); printf("书号:"); scanf("%s",s->no); printf("书名:"); scanf("%s",s->name); printf("定价:"); scanf("%d",s->price); s->next=p->next; p->next=s; printf("插入成功!"); getch(); } void ListDelete(){ int i,n; Book *p,*q; p=L; printf("请输入删除图书位置"); scanf("%d",&n); if(n>n1||n<=0){ printf("输入错误!"); //容错处理 getch(); } else{ for(i=1;i<n;i++) p=p->next ; q=p->next; p->next=q->next; free(q); //删除指定位置的学生信息 n1--; printf("已将原表中第%d个 图书信息删除!",n); getch(); } } void ListLength(){ Book *p; int i; p=L->next; i=0; while(p){i++; p=p->next ;} printf("图书个数为:%d",i); getch(); } void main(){ char c; while(1){ system("cls"); printf("**************************** 欢迎使用图书信息查询系统!*************************\n");//菜单选项 printf("\n"); printf("(1)输入图书信息;\n"); printf("(2)根据图书名进行查找;\n"); printf("(3)根据指定位置进行查找;\n"); printf("(4)插入图书信息到指定位置;\n"); printf("(5)删除指定位置的图书记录;\n"); printf("(6)统计表中图书数;\n"); printf("\n"); c=getch(); switch(c){ case '1':CreateList();break; case '2':if(b1)FindBook(); //通过b1的值,控制先执行(1)的操作,即生成链表 else {printf("请先输入图书信息!"); getch();};break; case '3':if(b1)Getlocation(); //通过b1的值,控制先执行(1)的操作,即生成链表 else {printf("请先输入图书信息!"); getch();};break; case'4':if(b1)ListInsert(); //通过b1的值,控制先执行(1)的操作,即生成链表 else {printf("请先输入图书信息!"); getch();};break; case '5':if(b1)ListDelete(); //通过b1的值,控制先执行(1)的操作,即生成链表 else {printf("请先输入图书信息!"); getch();};break; case '6':if(b1)ListLength(); //通过b1的值,控制先执行(1)的操作,即生成链表 else {printf("请先输入图书信息!"); getch();};break; default :printf("输入错误,请重新选择!"); } } }
实验题目: 线性表的基本操作 实验环境: Visual C++ 实验目的:1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 实验内容:建立一个包含图书(书号,书名,定价)信息的的链表,并具有如下功能: (1) 根据指定图书个数,逐个输入图书信息; (2) 根据书名进行查找,返回此书的书号和定价; (3) 根据指定的位置可返回相应的图书信息(书号,书名,定价); (4) 给定一个图书信息,插入到表中指定的位置; (5) 删除指定位置的图书记录; (6) 统计表中图书个数。 程序如下我写的非常完善,建立、查找、插入和删除都有 —————————————————————————————————— #include #include #include #include #include #define len sizeof(Book) typedef struct Book{ char no[8]; //8位书号 char name[20]; //书名 char price[8]; //定价 struct Book *next; }Book; Book *L; int b1,n1; void CreateList(){ int i,n; Book *p,*q; if(!b1){ L=(Book*)malloc(len); L->next=NULL; //生成只包含头结点的空链表 b1=1; n1=0; p=L; printf("要输入的图书数为:"); scanf("%d",&n); for(i=1;i<=n;i++){ //通过n控制输入图书数 q=(Book*)malloc(len); printf("请输入第%d个图书信息:\n",i); printf("书号:"); scanf("%s",q->no); printf("书名:"); scanf("%s",q->name); printf("定价:"); scanf("%s",q->price); q->next=L->next;L->next=q; n1=n1+1; } }else {printf("已输入完毕,请插入信息!"); //每次执行程序只能生成一次链表,之后只能进行插入、删除操作 getch();} } void FindBook(){ char ch[20]; int s2=0; Book *p; p=L->next; printf("请输入图书名:"); scanf("%s",ch); while(p){ if(strcmp(p->name,ch)==0) //判断和查询图书名是否相等 {printf("图书名:%-12.9s 书号:%-12.10s 定价:%s",p->name,p->no,p->price); //控制字符串输出的长度、格式 s2=1; getch();} p=p->next; } if(!s2) { printf("没有该图书信息!"); getch();} } void Getlocation(){ Book *p ; int i,j; p=L->next; //初始化,p指向第一个结点 j=1;// j为计数器 printf("请输入位置:"); scanf("%d",&i); while(p && jnext; ++j; } if(!p||j>i) printf("ERROR"); //i大于表长或小于1 printf("图书名:%-12.9s 书号:%-12.10s 定价:%s",p->name,p->no,p->price); getch(); } void ListInsert(){ int j,i; Book *p,*s; p=L;j=0; printf("请输入位置:"); scanf("%d",&i); while (p&&jnext;++j;} if(!p||j>i-1) printf("error"); s=(Book*)malloc(len); //生成新结点 printf("请输入新的图书信息:\n"); printf("书号:"); scanf("%s",s->no); printf("书名:"); scanf("%s",s->name); printf("定价:"); scanf("%d",s->price); s->next=p->next; p->next=s; printf("插入成功!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问咖啡与苹果是否不可以一起吃呢?
婺源沐心居客栈怎么去啊,我要去那办事
宏碁4820功能快捷键启动和关闭怎么没有提示
奇瑞的QQ6这款车怎么样?
我的宝宝快5个月了,还没长牙,头发稀少,又
问下各位师傅洗手间做防水步骤有哪些?
著名的黄花梨圈椅是哪个朝代的
我是安徽宿州的下岗职工有再就业优惠证交养老
梦见地里有水是什么意思?好不好呢?
求问,有人喂过品卓天然猫粮吗
咖啡厅包厢会装摄像头么
我做了开内眼角和割双眼皮,很肿该怎么办
我现在吃了海椒,头发少立马油了好烦
abouthalfofthefruitisripe是什么意思
办公家具风格分类一般分有哪几种?
推荐资讯
谁知道上海装地暖好吗
油性头发掉发怎么办
消防电梯集水井有效容积为什么不应小于2方土
沭阳门窗哪家质量好?
给即将毕业的暗恋男生的话(霸气但不明显,让
危房鉴定标准是什么
有没有人有科目四的 考试题啊??
220v转110v变压器红黄黑色线怎么区分
请问面膜和身体护理有哪些品牌?
梦见截肢的心理学解梦是什么意思?好不好呢?
围棋占边有几种常见走法,都叫什么名字.
西安那有卖品牌喜糖的
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?