c语言中数据结构 链式线性表的插入与删除问题

删除链式线性表指定位置的元素。
输入:第一行为自然数n,表示链式线性表的长度,第二行为n个自然数表示链式线性表各元素值。第三行为指定删除的位置,第四行为插入的位置及元素值(如果位置不对,则不作操作,插入位置应在删除元素后重新计数)。
输出:输出删除与插入元素后的链式线性表的所有元素,元素之间用一个空格隔开。
样例输入:
5
1 2 3 4 5
3
6 7
样例输出:
1 2 4 5

# include <iostream>
# include <stdlib.h>
using namespace std;

typedef struct node //定义线性链表
{
int data;
struct node *next;
}node,*linklist;

int inite (linklist &L) //初始化链表
{
L = new node;
if (!L)
return 0;
L->next = NULL;
return 1;
}

node *find_LL (linklist L,int i) //查找某个位置的结点
{
int j=0;
node *p = L;
while (j<i && p!= NULL)
{
j++;
p = p->next;

}
if (j == i)
return p;
return NULL;
}

int delete_LL (linklist &L,int i,int &e) //删除i位置的结点
{
node *p,*q;
p = find_LL(L,i-1);
if (p == NULL)
return 0;
q = p->next;
if (q == NULL)
return 1;
p->next = q->next;
e = q->data ;
free(q);
return 1;
}
int inseart_LL(linklist &L,int i,int e)// 在i位置插入e值
{
node *p,*q;
p = find_LL(L,i-1);
if (p == NULL)
return 0;
q = new node;
q->data = e;
q->next = p->next;
p->next = q;
return 1;
}

void print_LL (linklist L)
{
node *p = L->next;
while (p!=NULL)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;

}

int main ()
{
linklist L;

int n,i,e,j,k;
cin>>n;
cout<<endl;
for (i=1;i<=n;i++)
{
cin>>e;
}
cout<<endl;
cin>>j;
delete_LL(L,i,e);
print_LL(L);
cin>>j>>k;
inseart_LL(L,i,e);
print_LL(L);
system ("pause");
return 0;
}

大家看看这个程序有什么问题没 谢谢了

同学你好:我看了你的程序:你的程序问题比较多:
首先: 你只出事话了链表,但是当你将5个数输入的时候更本就没有创建单链表。就是没有将这5个数的节点连在头结点的后面。你怎么进行后面的查找位置,程序中连一个有效节点都没有。
你先将5个数的节点代码连在头结点后面的代码补上。
希望你能采纳
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-03
好几处错误,帮你改了下,详见注释:
int main ()
{
linklist L;

int n,i,e,j,k;
cin>>n;
cout<<endl;
inite(L);
for (i=1;i<=n;i++)
{
cin>>e;
inseart_LL(L,i,e); //主函数里面只输入了e,但没有加入到链表中去
}
cout<<endl;
cin.ignore (); //避免前面的输入回车造成的影响
cin>>j;
delete_LL(L,j,e); //此处参数应为 j, 与输入对应
print_LL(L);
cin>>j>>k;
inseart_LL(L,j,k); //此处参数应为 j,k 与输入对应
print_LL(L);
system ("pause");
return 0;
}本回答被提问者和网友采纳

c语言数据结构线性表插入和删除实现代码错误在哪
L->length = 0;return TRUE;}int insertlist(Sqlist *L,int pos,ElemType e) {int i;if(L->length == 0) { \/\/ 第一元素无条件插入L->elme[0] = e;L->length = 1;return TRUE;}if(L->length >= MAXSIZE) {printf("表满。length = %d。\\n",L->length);return ERROR;}if(...

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
bool InsertList(LinkList la,int i,int e){ \/\/在la链表中的i位置插入数值e int j=1;

c语言 链表操作:建立,显示及节点的插入,删除
\/\/ 初始条件:线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE if(L->next) \/\/ 非空 return 0;else return 1;} int ListLength(LinkList L){ \/\/ 初始条件:线性表L已存在。操作结果:返回L中数据元素个数 int i=0;LinkList p=L->next; \/\/ p指向第一个结点 while(p...

用C语言实现线性表的顺序存储(创建,插入,删除和查找)
cout<<"数据库未加载"<<endl; Sleep(DELAYTIME); return 0; } cout<<"请输入要删除学生的学号:"; cin>>num; for(p1=head;p1!=NULL;) { if(p1->num==num)\/\/找到 { if(p1==head)\/\/要删除的结点是头结点 { head=p1->next; } else { p2->next=p1->next; } cout<<"成功删除!!"; } p...

线性表先插入再删除的算法 C语言
cout<<"请输入数据个数"<<endl;cin>>n;for(i=0;i<n;i++){ cout<<"data["<<i<<"]"<<endl;cin>>&tmp;L->data[i]=tmp;} L->last=n-1;cout<<endl;} void printout(sequenlist *L){ int i;for(i=0;i<=L->last;i++){ cout<<"data["<<i<<"]"<<endl;cout<<L->...

数据结构打怪之路 -- 顺序表的增删查改 (C语言实现)
数据结构打怪之路 -- 顺序表的增删查改 (C语言实现)线性表是数据元素的有限序列,逻辑上线性排列,物理存储可为数组或链式。顺序表,如数组,是数据连续存储的结构,分为静态与动态两类。静态顺序表空间固定,动态顺序表则根据需要动态扩展。在实际应用中,动态顺序表更为常见,如C语言中,我们构建一个...

数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成...
一、单链表的建立 有了动态内存分配的基础,要实现链表就不难了。所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分:1、数据域:用来存储...

用C语言头插法或尾插法建立带头结点的单链表,实现单链表上的插入,删除...
while(p) \/* 没到表尾 *\/ { q=p->next;free(p);p=q;} (*L)->next=NULL; \/* 头结点指针域为空 *\/ return OK;} \/* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 *\/ int ListLength(LinkList L){ int i=0;LinkList p=L->next; \/* p指向第一个结...

c数据结构 实现单链表的创建、插入、删除、打印和查询
cout<<"您查找的数据不在线性表中."<<endl;return l;} link * del(link *l, int i){ link *p,*s;p=get(l,i-1);if(p==NULL)cout<<"输入有误"<<endl;else { s=p->next;p->next=s->next;free(s);} return l;} link * add(link *l ){ link *p,*s;cout<<"请输入...

用C语言创建一个空线性表,并完成插入删除等基本操作,可就是不知道怎么...
亲,你用的是顺序表的结构体和初始化,其它用的却是链表的操作,建议多看看数据结构的书。

相似回答