拜求:输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等操作。

gannan813 2011-03-29 11:12:24
问:输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等操作。
...全文
2338 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanjie3263936 2012-03-12
  • 打赏
  • 举报
回复
1.实现带头结点的单链表的创建。
2.已知带头结点的单链表L中的结点是按整数值递增排列,设计算法并实现将值为x的结点插入到表L中,使得L仍然有序。
3.实现输出单链表中各结点的值。
这道题的第二问该怎么实现呢?
tanjie3263936 2012-03-12
  • 打赏
  • 举报
回复

本书上有呢?
louzilc 2011-04-17
  • 打赏
  • 举报
回复
强烈建议楼主看书去
luchangxing09 2011-04-17
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;


LinkList CreateLinkList()
{
LinkList head,r,s;
int x;
int flag=1;
head=(LinkList)malloc(sizeof(Node)); //建立单链表的头结点
head->next=NULL; //将单链表最后一个结点rear指针域置空
r=head;

printf("请从键盘任意输入数据建立单链表并以-1结束:\n");
while(flag)
{
scanf("%d",&x);
if(x!=-1)
{
s=(LinkList)malloc(sizeof(Node));
s->data=x;
r->next=s;
r=s;

}
else
{flag=0;
r->next=NULL;
printf("您建立的单链表如下:\n");
}
}
return head;
}
void printfList(LinkList head)
{
LinkList p;
p=head->next;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}


void InsertList(LinkList head,int x,int i)
{
LinkList pre,s;
int j;
pre=head;
j=0;
while(pre!=NULL && j<i-1 )
{
pre=pre->next;
j++;
}
if((j!=i-1)||(pre==NULL))
{
printf("\n no posstion Error\n");return;}
s=(LinkList)malloc(sizeof(Node));
s->data=x;
s->next=pre->next;
pre->next=s;
printfList(head);

}


void DeleteList(LinkList head,int i)
{
LinkList pre,r;
int j;
pre=head;
j=0;
while(pre->next!=NULL && j<i-1)
{
pre=pre->next;
j++;
}
if((j!=i-1)||(pre->next==NULL) )
{
printf("\nPostion Error\n");return;}
r=pre->next;
pre->next=r->next;
free(r);
}

int lenList(LinkList rb)
{

LinkList p,head;
int n=0;

head=rb->next;
p=head;
while(p!=NULL)
{
n++;
p=p->next;
}
printf("线性表的长度=%d",n);
return 0;
}

void main()
{
LinkList head;
int x,j,i;
j=-1;
printf("********单链表的插入、删除************\n") ;
printf("\n");
printf("首先建立一个单链表\n");
head=CreateLinkList();
printfList(head);
printf("请选择您要进行的操作(1为插入,2为删除,3求线性表的长度,0为退出)\n");


while(1)
{
printf("\n请选择您要进行的操作:\n");
scanf("%d",&j);
getchar();//吸收回车
switch(j)
{
case 1:
{
printf("请输入要插入的元素的位置:\n");
scanf("%d",&i);
getchar();
printf("请输入要插入的数据:\n");
scanf("%d",&x);
getchar();
InsertList(head,x,i);
break;
}
case 2:
{
printf("请输入要删除的元素的位置:\n");
scanf("%d",&i);
getchar();
DeleteList(head,i);
printfList(head);
break;
}
case 3:
{
lenList(head);
break;
}
case 0:
exit(0);
break;
default:
{
printf("该操作不存在,请输入正确的操作!\n");
break;
}
}
}
}
qq675927952 2011-04-17
  • 打赏
  • 举报
回复


#include "LinkList.h"
#include <iostream>
using namespace std;
//创建一个带头结点单链表,当输入为ctrl +Z 输入结束
int CreateList_L(LinkList &L)
{
L = new LNode();
L->next = NULL;
ElemType data ;
LinkList p =NULL;
while(cin>>data)
{
p = new LNode();
p->data = data ;
p->next = L->next ;
L->next = p;
}
return 1;
}

//L为带头结点的单链表的头指针
//当第i个 元素存在时,其值赋给e 并返回 1
int GetElem_L(LinkList L,int i,ElemType &e)
{
LinkList p = L->next;
int j=1;
while(p && j<i )
{
p=p->next ;
j++;
}
if(!p || j>i ) return -1;
e = p->data ;
return 1;
}
//在带头结点的单链线性表L中第i个位置之前插入元素 e
int ListInsert_L(LinkList& L,int i,ElemType e)
{
LinkList p = L->next;
int j=1;
while( p && j<i-1)
{
p = p->next ;
j++;
}
if(!p || j> i-1)
return -1;
LinkList q = new LNode();
q->data = e ;
q->next = p->next ;
p->next = q ;
return 1;
}
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
int ListDelete_L(LinkList& L,int i,ElemType& e)
{
LinkList p = L->next;
int j=1;
while( p && j<i-1)
{
++j ;
p=p->next ;
}
// p为i 前面那个元素的 指针
if( !p || j> i-1) return -1;
LinkList q = p->next ; //第 i 个元素
p->next = q->next ;
delete q ;

return 1;
}

//遍历单链表
int TraverseList(LinkList & L)
{
LinkList p = L;
while(p->next != NULL)
{
cout<<p->next->data<<" ";
p = p->next ;
}
cout<<endl;
return 1;
}

//销毁单链表
int DestroyList(LinkList & L)
{
while(L != NULL)
{
LinkList p = L;
L = L->next ;
delete p ;
}

return 1;
}

int main()
{
LinkList L ;
cout<<"创建一个带头结点单链表,当输入为ctrl +Z 输入结束"<<endl;
CreateList_L(L) ;
cout<<endl;

cout<<"遍历输出"<<endl;
TraverseList(L) ;
cout<<"在第2个位置插入一个数 3"<<endl;
ListInsert_L(L,2,3);
cout<<"遍历输出"<<endl;
TraverseList(L) ;
cout<<endl;

ElemType e;
cout<<"在第2个位置删除一个数 "<<endl;
ListDelete_L( L,2,e);
cout<<endl;
cout<<"遍历输出"<<endl;
TraverseList(L) ;


DestroyList( L) ;
system("pause") ;
return 0;
}
p30598261 2011-04-15
  • 打赏
  • 举报
回复 1
这个问题。才发现,原来楼主比我还懒
leebeen34 2011-04-15
  • 打赏
  • 举报
回复

typedef struct LNode
{
int data;//结点数据
LNode *next;//后继
}LNode,*LinkList;//LNode*<=>LinkList
DuLinkList GetElem(LinkList &L,int i)
{
LinkList* p=new LinkList;
if(i<0)
{
p=NULL;
}
else if(i==0)
{
p=L;
}
else
{
for(int j=0;j<i;j++)
{
p=L->next;
}
}
return p;
}
bool ListInsert(LinkList &L,int i,int e)
{
bool flag;
LNode* p=GetElem(L,i);
LNode* s=new LNode;
if(!p||!s)
{
flag=false;
}
else
{
s->data=e;
s->next=p;
flag=true;
}
return flag;
}
bool ListDelete(LinkList &L,int i)
{
bool flag;
LNode* p=GetElem(L,i);
if(!p)
{
flag=false;
}
else
{
delete p;
flag=true;
}
return flag;
}
int GetLength(LinkList &L)
{
int i=0;
LNode* p=GetElem(LinkList L,0);
while(p->next!=NULL)
{
i=i+1;
}
return i;
}

kql1234 2011-04-02
  • 打赏
  • 举报
回复
看看数据结构的书籍,讲解的很详细
xuanjie25 2011-03-31
  • 打赏
  • 举报
回复
这些书上都有的啊····
I_code 2011-03-31
  • 打赏
  • 举报
回复
楼主随便找本数据结构的书来看吧,书上讲的很详细。
woshiwuxingcheng 2011-03-31
  • 打赏
  • 举报
回复
是的。。数据结构书上有

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧