建立一个单链表,实现插入与删除功能

要求:
1.建立一个按关键字有序的线性表,从键盘上输入一个数,将该数插入到表中,使该线性表插入数据后仍按关键字有序
2.建立一个线性表,从键盘上输入一个数,查找表中是否存在该数,若有则删除所有与该数相等的数

第1个回答  推荐于2017-09-01
  建立一个单链表,实现插入与删除功能的代码如下:
  ///单链表
  #include<iostream>
  using namespace std;
  
  typedef int elemtype; //数据类型模版
  
  struct Lnode //结点
  {
  elemtype data;
  Lnode *next;
  };
  
  ///建表
  void creat_Link(Lnode &head)
  {
  Lnode *p,*q;
  int n;
  p=new Lnode;
  head=p;
  cout<<"输入链表长度:"<<endl;
  cin>>n;
  cout<<"输入数据:"<<endl;
  cin>>p->data;
  q=p;
  for(int i=1;i<=n-1;i++)
  {
  p=new Lnode;
  //cout<<"输入数据:";
  cin>>p->data;
  q->next=p;
  q=p;
  }
  q->next=NULL;
  }
  
  ///表的输出
  void output_Link(Lnode *&head)
  {
  if(head==NULL)
  {cout<<"空链表!"<<endl;
  return;}
  Lnode *q;
  q=head;
  //cout<<"此链表为:";
  while(q!=NULL)
  {
  cout<<q->data<<" ";
  q=q->next;
  }
  cout<<endl;
  }
  
  
  ///表的插入
  void insert_Link(Lnode *&head)
  {
  int i;
  cout<<"输入要插入的位置:";
  
  cin>>i;
  Lnode *q,*iq;
  q=head;
  for(int j=1;j<i;j++)
  {
  iq=q;
  q=q->next;
  }
  
  cout<<"输入插入的数据:";
  Lnode *p;
  p=new Lnode;
  cin>>p->data;
  p->next=iq->next;
  iq->next=p;
  cout<<endl;
  
  }
  
  ///表的数据删除
  void Delete_Link(Lnode *&head)
  {
  cout<<"输入删除的位置:";
  int i;
  cin>>i;
  if(i==1)
  head=head->next;
  else
  {
  Lnode *p,*q;
  q=head;
  for(int j=1;j<i;j++)
  { p=q;
  q=q->next;
  }
  p->next=q->next;
  delete q;
  cout<<endl;
  }
  }
  
  
  int main()
  {
  Lnode *head;
  head=NULL;
  creat_Link(head);
  
  insert_Link(head);
  output_Link(head);
  Delete_Link(head);
  output_Link(head);
  return 0;
  }
  [扩展]
  以“结点的序列”表示线性表称作线性链表(单链表),链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
第2个回答  推荐于2017-09-04
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct Node)
typedef struct Node
{
int data;
struct Node *next;
}node;
int n;
node *Creat(void)
{
int data;
node *head;
node * p1=(node*)malloc(LEN);
node * p2=(node*)malloc(LEN);
head=NULL;
n=0;
puts("Please input a num:");
scanf("%d",&p1->data);
while(p1->data!=0)
{
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(node*)malloc(LEN);
scanf("%d",&p1->data);
}
free(p1);
p1=NULL;
p2->next=NULL;
return head;
}
void Print(node *head)
{
node *p;
p=head;
if(head==NULL)
{
printf("No Records?!");
return;
}
else
do
{
printf("%d-->",p->data);
p=p->next;
}while(p!=NULL);
printf("\n");
}
node* Insert(node *head)
{
int data;
node *p0=(node*)malloc(LEN),*p1,*p2;
p1=head;
if(head==NULL)
{
printf("No Records?!");
return NULL;
}
puts("Please input a num to insert:");
scanf("%d",&p0->data);
while(p1->data<p0->data&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(p1->data>=p0->data)
{
if(p1==head)
head=p0;
else
p2->next=p0;
p0->next=p1;
}
else
printf("Not find!\n");
return head;
}
node *Delete(node *head)
{
node *p0,*p1,*p2,*p3;
p0=(node*)malloc(LEN);
if(head==NULL)
{
printf("No Reacord?!");
return NULL;
}
puts("Please input a num to delete:");
scanf("%d",&p0->data);
while(head->data==p0->data)
head=head->next;
p1=head;
if(head->next!=NULL)
do
{
p2=p1;
p1=p1->next;
while(p1!=NULL&&p1->data==p0->data)
{
p3=p1;
p1=p1->next;
free(p3);
}
p2->next=p1;
}while(p1!=NULL);
return head;
}
int main()
{
node *head;
head=Creat();
Print(head);
head=Insert(head);
Print(head);
head=Delete(head);
Print(head);
return 0;
}
Please input a num:
2 3 4 5 6 0
2-->3-->4-->5-->6-->
Please input a num to insert:
4
2-->3-->4-->4-->5-->6-->
Please input a num to delete:
5
2-->3-->4-->4-->6-->
Press any key to continue
VC6.0本回答被提问者采纳

实现单链表的建立、清空、插入、删除查找、修改等运算。用数据结构...
int data;struct LNode *next;}LNode,*Llist;\/\/方法声明 LNode *creat_head();\/\/创建一个空表 void creat_list(LNode *,int);\/\/创建一个长度为n的线性链表 void insert_list(LNode *,int,int );\/\/插入一个元素 int delete_list(LNode *,int);\/\/删除一个元素 \/\/创建一个空链表 L...

怎样编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操...
typedef int Elemtype;typedef int status;define OVERFLOW -2 define OK 1 define ERROR -1 include "stdio.h"include "stdlib.h"typedef struct LNode { Elemtype data;struct LNode *next;}*linklist;\/\/构造链表 void Create_Linklist(linklist &L){ linklist p;p=(linklist)malloc(sizeo...

...使用单链表实现系统进程列表,完成插入、删除、查询等操作。_百度...
1、数据域:用来存储本身数据 2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。例:typedef strUCt node { char name[20];struct node *link;}stud;这样就定义了一个单链表的结构,其中char name[20]是一个用来存储姓名的字符型数组,指针*link是一个用来存储其直接后继...

数据结构代码(用C语言) 单链表的插入和删除
\/\/链表建立 Node* creat(){ Node *head = NULL, *p = NULL, *s = NULL;int Date = 0, cycle = 1;head = (Node*)malloc(sizeof(Node));if(NULL == head){ printf("分配内存失败\\r\\n");return NULL;} head->pstnext = NULL;p = head;while(cycle){ printf("请输入数据且当...

...内容是建立一个链表,还有链表的插入与删除。
return 1;} int listdelete(linklist &l,int i)\/\/在带头节点的单链表中删除第i个元素e,并返回其值 { int j=0;linklist p;p=new lnode;p=l;while(p->next&&jnext;++j;} if(!(p->next)||j>i-1){return 0;} linklist q;q=new lnode;q=p->next;p->next=q->next;m=q-...

用尾插法建立一个单链表,输出结点个数,插入或删除一个结点,并实现按指...
void CreatListF(LinkList *&L,ElemType a[],int n) \/\/头插法建表 { LinkList *s;int i;L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;for(i=0;i<n;i++){ s=(LinkList *)malloc(sizeof(LinkList));s->data=a[i];s->next=L->next;L->next=s;} } void ...

如何用C语言创建一个链表,实现增、删、改、查?
student st; \/\/表示一个学生的信息 struct node *next; \/\/表示一个NODE类型的指针 }NODE;\/\/1、写出建立一个带头结点的线性链表的函数,其中每个结点包括学号、姓名、分数三个数据域。函数形式如下:NODE *creat_link(int direction){ NODE *head,*p,*tail;int xh,i=1;if(direction==1) \/\/当...

急:C++ 单链表的编写
谁能给我个关于单链表的程序要求:实现一个单链表,每个节点是一个学生的信息,能够实现追加、按照指定位置的删除、插入、列表。这是我的作业,哪位能给点思路,或者给点参考程序。... 谁能给我个关于单链表的 程序要求:实现一个单链表,每个节点是一个学生的信息,能够实现追加、按照指定位置的删除、插入、列表。

...法建立带头结点的单链表,实现单链表上的插入,删除计数,查找,修改,输...
\/* 操作结果:用e返回L中第i个数据元素的值 *\/ Status GetElem(LinkList L,int i,ElemType *e){ int j;LinkList p; \/* 声明一结点p *\/ p = L->next; \/* 让p指向链表L的第一个结点 *\/ j = 1; \/* j为计数器 *\/ while (p && jnext; \/* 让p指向下一个结点 *\/ ...

c语言 链表操作:建立,显示及节点的插入,删除
L->next = NULL; \/\/ 先建立一个带头结点的单链表 for (i=n; i>0; --i){ p = (LinkList)malloc(sizeof(LNode)); \/\/ 生成新结点 p->data = rand()%200; \/\/ 改为一个随机生成的数字(200以内)p->next = L->next;L->next = p; \/\/ 插入到表头 } } \/\/ Create...

相似回答