| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 728 人关注过本帖
标题:我是初学的,高手帮个忙哈
只看楼主 加入收藏
wgcz
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-11-13
收藏
 问题点数:0 回复次数:1 
我是初学的,高手帮个忙哈
连表的插入与删除算法(用C语言编写,简单点好不,怕看不懂)高手帮个忙哈
搜索更多相关主题的帖子: 初学 
2008-11-13 00:27
jdshaoheyi
Rank: 1
等 级:新手上路
帖 子:133
专家分:5
注 册:2008-11-6
收藏
得分:0 
#include<stdio.h>
#include<malloc.h>
#include  <stdlib.h>


typedef struct Lnode
{
    int data;
    struct Lnode *next;
}Lnode,*Linklist;

//*********************************************************链表创建函数
int  creat (Linklist &L,int n)
{
   Lnode *p;
   
   p=(Linklist)malloc(sizeof (Lnode)); //

   p->data=n;
   p->next=L;
   L=p;
   return 1;
}



//******************************************************删除函数部分

int del (Linklist &p,int n)
{
  int i;
  Lnode *q;
  
  for(i=1;i<n-1;i++)
      p=p->next;  //找到删除元素前一个节点
      
      printf("要删除的节点对应数据是 %d\n",p->next->data);
      q=p->next;   //将要删除的元素赋给q

      p->next=q->next;
      
      free(q);   //释放q节点
      return 1;
}
//*********************************************************************插入函数部分

int insert (Linklist &L1,Lnode *p,int m)
{
    int i;
    for(i=1;i<m-1;i++)
        L1=L1->next;  //找到要插入节点位置前一个节点

        p->next=L1->next;

        L1->next=p;
        return 1;
}

//*******************************************************************主函数部分
int main()
{   
    int flag=0;
    int data;  
    int i;     //作为计数器
    int num;  //链表的总长度
    int del_num,insert_num;    //要删除插入节点的序列号
    Lnode *newnode;  //创建等待插入节点
    Lnode *L1;

//Lnode *ceshi;

    Linklist L;
    L=newnode=(Linklist)malloc(sizeof(Lnode));
    L->next=NULL;
//*************************************************开始创建链表
    printf("请输入链表长度(int):\n");
    scanf("%d",&num);
    
    for(i=1;i<=num;i++)
    {
        printf("请输入节点数据(整数):\n");
        scanf("%d",&data);
        creat(L,data);   

    }
/********************************************************************测试时使用此语句

    ceshi=L;
    printf("你创建的链表是:\n");
    while(!(ceshi->next==NULL))
    {
        printf(" %d ",ceshi->data);
        ceshi=ceshi->next;
    }
    
    
    printf("\n");
    printf("创建链表成功!\n");
    printf("****************************");
    
    
*/    
//***************************************************************************删除部分
    while(flag==0)
    {
        printf("\n请输入要删除节点的序列号:\n");
        scanf("%d",&del_num);
         if(del_num<=1||del_num>=num)
             printf("输入有误(你不能删除首节点和尾节点)!");
         else
            flag=1;
    }

      
    L1=L;  //防止更改L
    del(L1,del_num);
   
    printf("删除节点后的链表是:\n");
    
    L1=L;  //防止更改L
    while(!(L1->next==NULL))
    {
        printf(" %d ",L1->data);
        L1=L1->next;
    }
    printf("\n\n");

//********************************************************************调用插入函数    
    
  
    printf("请输入要插入节点的数据部分(int型):\n");
    scanf("%d",&data);   
    newnode->data=data;
   
    printf("\n请输入insert_num的值(int型):\n");
    printf("新节点将被插入在你输入节点号对应节点的后面!\n");
    
    scanf("%d",&insert_num);
    
    printf("节点将被插在第%d个节点之后!\n",insert_num);
    

    
    L1=L;
    insert(L1,newnode,insert_num);
  
    printf("\n插入新节点后的链表是:\n");

    L1=L;

    for(i=1;i<=num;i++)
    
    {
        printf(" %d ",L1->data);
        L1=L1->next;
    }
    
    printf("\n\n");
    return 1;
}
2008-11-13 17:12
快速回复:我是初学的,高手帮个忙哈
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018548 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved