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

关于数据结构线性表插入的问题,比如说有一个一维数组,a[5]={0,1,2,3,4,5},在2的前面插入一个数的源程序,谢谢!... 关于数据结构线性表插入的问题,比如说有一个一维数组,a[5]={0,1,2,3,4,5},在2的前面插入一个数的源程序,谢谢! 展开
 我来答
yulongxy
2008-12-18 · TA获得超过503个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:123万
展开全部
不知道符合你的想法不?
#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);
}
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
关softeng
2008-12-16
知道答主
回答量:18
采纳率:0%
帮助的人:0
展开全部
这是我做的一个关于链表的各种操作的代码,
希望可以给你带来帮助:
#include<iostream>
#include<malloc.h>
#include<process.h>

#define OVERFLOW -2;
#define ERROR 0;
#define OK 1;
using namespace std;
typedef struct LNode{
char data;
struct LNode *next;
}LNode,*Linklist;

void InitList(Linklist &L)
//创建一个空链表
{
L=(Linklist)malloc(sizeof(LNode));
//if(!L) exit(OVERFLOW);
L->next=NULL;
//return OK;
}

int Listlenght(Linklist L)
//返回链表的长度
{
Linklist p;
int n=0;
p=L->next;
while(p!=NULL)
{
n+=1;
p=p->next;

}
return n;
}

char Getelem(Linklist L,int i,char &e)
//提取链表内的数据
{
Linklist p;
p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}

int Locateelem(Linklist L,char e)
//返回元素在链表中的位置
{
int i=1;
Linklist p;
p=L->next;
while(p!=NULL&&p->data!=e)
{
p=p->next;
++i;
}
if(p==NULL)
{
cout<<"没有这个元素"<<endl;
return ERROR;
}
return i;
}

char Priorelem(Linklist L,char cur_e,char &pre_e)
//提取与所比较的元素的前一个元素,如比较不和,则告知没有此元素
{
Linklist p;
p=L->next;
while(p->next!=NULL&&p->next->data!=cur_e)
{

//if(p->next->data==cur_e)
//break;
p=p->next;
}
if(p->next==NULL)
{
cout<<"没有此元素"<<endl;
return ERROR;
}
pre_e=p->data;
}

char Nextelem(Linklist L,char cur_e,char &next_e)
//提取所比较元素的下一个元素,如比较不和,则告知没有此元素
{
Linklist p;
p=L->next;
while(p->next!=NULL&&p->data!=cur_e)
{
//if(p->data==cur_e&&p->next!=NULL)
// break;
p=p->next;
}
if(p->next==NULL)
{
cout<<"没有此元素"<<endl;
return ERROR;
}
return next_e=p->next->data;
}

int Listinsert(Linklist &L,int i,char e)
//在链表中插入一个元素,长度加1
{
Linklist p,s;
int Len;
p=L;
int j=0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1)return ERROR;
s=(Linklist)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=s;
Len=Listlenght(L)+1;
return Len;
}

char Deleteelem(Linklist &L,int i,char &e)
//删除L的第i个元素,并用e返回元素的值,L的长度减1
{
Linklist p,s;
p=L;
int Len;
int j=0;
while(p->next!=NULL&&j<i-1)
{
p=p->next;
++j;
}
if(p==NULL||j>i)return ERROR;
s=p->next;p->next=s->next;
e=s->data;free(s);
Len=Listlenght(L)+1;
return Len;
}

void unionn(Linklist &La,Linklist Lb)
{
//Linklist p;
//p=La->next;
int n,h,i=1;
n=Listlenght(Lb);
h=Listlenght(La);
char e;
for(i=1;i<=n;i++)
{
Getelem(Lb,i,e);
if(!Locateelem(La,e))
Listinsert(La,++h,e);
}
}
void display(Linklist &L)
{
Linklist p;
p=L->next;
if(p==NULL)
cout<<"这是一个空链表"<<endl;
else if(p->next==NULL)
cout<<"这个链表有一个元素:"<<p->data<<endl;
else
{
cout<<"这个链表的元素有:";
while(p->next!=NULL)
{
cout<<p->data<<"->";
p=p->next;
}
cout<<p->data<<endl;
}

}
int main()
{
Linklist La,Lb,wo;
int n,i;
char e,h,k,t;
InitList(La);
Listinsert(La,1,'a');
Listinsert(La,2,'b');
Listinsert(La,3,'c');
Listinsert(La,4,'d');
Listinsert(La,5,'e');
Listinsert(La,6,'f');
display(La);
n=Listlenght(La);
cout<<"La链表有"<<n<<"个元素"<<endl;
Getelem(La,4,e);
cout<<"第四个元素是:"<<e<<endl;
i=Locateelem(La,'e');
cout<<"与'e'相等的元素的位置是:"<<i<<endl;
i=Locateelem(La,'k');
Priorelem(La,'e',h);
cout<<"元素'e'的前一个元素是:"<<h<<endl;
Priorelem(La,'l',h);
Priorelem(La,'a',h);
Nextelem(La,'e',k);
cout<<"元素'e'的后一个元素是:"<<k<<endl;
Nextelem(La,'f',k);
Listinsert(La,3,'z');
display(La);
Deleteelem(La,4,t);
cout<<"删除的元素是:"<<t<<endl;
InitList(Lb);
Listinsert(Lb,1,'g');
Listinsert(Lb,2,'a');
Listinsert(Lb,3,'i');
Listinsert(Lb,4,'d');
display(Lb);
unionn(La,Lb);
display(La);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rainssong
2008-12-15 · TA获得超过691个赞
知道小有建树答主
回答量:662
采纳率:0%
帮助的人:302万
展开全部
百度搜索CSDN,里面不光线性表,队列什么的代码都有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lucifer4711
2008-12-15 · TA获得超过107个赞
知道答主
回答量:60
采纳率:100%
帮助的人:0
展开全部
实验题目: 线性表的基本操作
实验环境: 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("输入错误,请重新选择!");
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式