| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1047 人关注过本帖
标题:刚学数据结构
只看楼主 加入收藏
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
结帖率:87.5%
收藏
 问题点数:0 回复次数:7 
刚学数据结构
刚刚学完数据结构中的单链表。所以就编了一个简单的单链表;有什么不好的地方,希望高手指出:
                                                                                               
 // SqTest0316.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>

//定义节点数据结构
typedef struct Node{
    int date;                           //数据域
    Node * next;                       //指针域
}*Plist;


//初始化链表

void InitNode(Plist &ls)
{
    ls = (Node*)malloc(sizeof(Node));    //申请节点
    ls->next = 0;
    ls->date = 0;
    return;
}

//创建链表

void CreateNode(Plist &ls)
{
    int number ;
    Plist p;
    scanf("%d",&number);
    do{
        //采用前插方法                                                   //后插法是?
        p=(Plist)malloc(sizeof(Node));     //申请节点部分
        p->date=number;
        p->next = 0;
        //插入部分
        p->next = ls->next;
        ls->next = p;
        scanf("%d",&number);
    }while(number!=-1);
   
}

/*// 遍历链表

void printfNode(Plist &ls)
{
    Plist  p=ls->next;
    while(p->next!=0){
        printf("%d ",p->date);
        p=p->next;
    }
}*/

//遍历链表

void PrintfNode(Plist &ls)
{
    Plist  p=ls->next;
    int i=1;
    while(1)
    {
        printf("第%d个元素为:%d\n",i,p->date);
        if(p->next==0)
            break;
        p = p->next;
        i++;
   
    }
    return;
}

//插入

void InsertNode(Plist &ls,int i,int e)
{
    Plist p=ls,q;
    int j=0;                   //计时器
    //寻找i的位置
    while(j<i-1){
        p=p->next;
        j++;
    }

   q=(Plist)malloc(sizeof(Node));
   q->date=e;
   q->next=p->next;
   p->next=q;
   printf("插入一个数字后:");
   p=ls->next;
   while(1)
    {
        printf("%d  ",p->date);
        if(p->next==0)
            break;
        p = p->next;
   }
}


//删除

void DeleteNode(Plist &ls,int number)
{
    Plist p=ls,q;
    for(;p->next!=0;p=p->next){
        if(p->next->date==number){
            q=p->next;
            p->next=q->next;
            break;
        }
    }
    printf("删除该节点后:");
    for(p=ls->next;p->next!=0;p=p->next)
        printf("%d  ",p->date);
    printf("%d  ",p->date);
}

//查找

int SearchNode(Plist &ls,int number)
{
    int e=0;
    Plist p=ls;
    for(;p->next!=0;p=p->next,e++){
        if(number==p->date)
            return e;
    }
    if(p->next==0)
        return 0;
}


int main(int argc, char* argv[])
{   

    Plist ls;
    InitNode(ls);
    printf("date=%d\n",ls->date);
    printf("next=%d\n",ls->next);
   
    //创建函数
    printf("请输入一串数字(以-1作为结束条件):");
    CreateNode(ls);
    PrintfNode(ls);
   
    //插入函数
    int number ,i;
    printf("请输入你要插入的数:");
    scanf("%d",&number);
    printf("请输入你要插入的位置:");
    scanf("%d",&i);
    InsertNode(ls,i,number);
    printf("\n");

    //删除函数
    int e;
    printf("请输入你要删除的数:");
    scanf("%d",&e);
    DeleteNode(ls,e);
    printf("\n");

    //查找
    int m,n;
    printf("请输入你要查找的数:");
    scanf("%d",&m);
    n=SearchNode(ls,m);
    if(n==0)
        printf("该单链表中没有该数!");
    else
        printf("%d在该链表中的位置是:第%d元素",m,n);
    printf("\n");
    return 0;
}
搜索更多相关主题的帖子: 数据结构 
2010-04-14 15:03
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:0 
不是高手.... 但按我的编程习惯是这样的:

#include <stdio.h>
#include <stdlib.h>

//定义节点数据结构
typedef struct Node{
    int date;                           //数据域
    Node * next;                       //指针域
};


//初始化链表

Node* InitNode(Node *ls)
{
    ls = (Node*)malloc(sizeof(Node));    //申请节点
    ls->next = NULL;
    ls->date = 0;
    return ls;
}

//创建链表

void CreateNode(Node *ls)
{
    int number ;
    Node *p;
    scanf("%d",&number);
    do{
        //采用前插方法                                                   //后插法是?
        p=(Node *)malloc(sizeof(Node));     //申请节点部分
        p->date=number;
        p->next = NULL;
        //插入部分
        p->next = ls->next;
        ls->next = p;
        scanf("%d",&number);
    }while(number!=-1);
   
}

/*// 遍历链表

void printfNode(Node &ls)
{
    Node  p=ls->next;
    while(p->next!=0){
        printf("%d ",p->date);
        p=p->next;
    }
}*/

//遍历链表

void PrintfNode(Node *ls)
{
    Node  *p = ls->next;
    int i=1;
    while(1)
    {
        printf("第%d个元素为:%d\n",i,p->date);
        if(p->next==NULL)
            break;
        p = p->next;
        i++;
   
    }
    return;
}

//插入

void InsertNode(Node *ls,int i,int e)
{
    Node *p=ls,*q;
    int j=0;                   //计时器
    //寻找i的位置
    while(j<i-1){
        p=p->next;
        j++;
    }

   q=(Node *)malloc(sizeof(Node));
   q->date=e;
   q->next=p->next;
   p->next=q;
   printf("插入一个数字后:");
   p=ls->next;
   while(1)
    {
        printf("%d  ",p->date);
        if(p->next==NULL)
            break;
        p = p->next;
   }
}


//删除

void DeleteNode(Node *ls,int number)
{
    Node *p=ls,*q;
    for(;p->next!=NULL;p=p->next){
        if(p->next->date==number){
            q=p->next;
            p->next=q->next;
            break;
        }
    }
    printf("删除该节点后:");
    for(p=ls->next;p->next!=NULL;p=p->next)
        printf("%d  ",p->date);
    printf("%d  ",p->date);
}

//查找

int SearchNode(Node *ls,int number)
{
    int e=0;
    Node *p=ls;
    for(;p->next!=NULL;p=p->next,e++){
        if(number==p->date)
            return e;
    }
    if(p->next==NULL)
        return 0;
}


int main(int argc, char* argv[])
{   

    Node *ls;
    ls = InitNode(ls);
    printf("date=%d\n",ls->date);
    printf("next=%d\n",ls->next);
   
    //创建函数
    printf("请输入一串数字(以-1作为结束条件):");
   
    CreateNode(ls);
    PrintfNode(ls);
   
    //插入函数
    int number ,i;
    printf("请输入你要插入的数:");
    scanf("%d",&number);
    printf("请输入你要插入的位置:");
    scanf("%d",&i);
    InsertNode(ls,i,number);
    printf("\n");

    //删除函数
    int e;
    printf("请输入你要删除的数:");
    scanf("%d",&e);
    DeleteNode(ls,e);
    printf("\n");

    //查找
    int m,n;
    printf("请输入你要查找的数:");
    scanf("%d",&m);
    n=SearchNode(ls,m);
    if(n==0)
        printf("该单链表中没有该数!");
    else
        printf("%d在该链表中的位置是:第%d元素",m,n);
    printf("\n");
    return 0;
}

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-14 17:26
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
收藏
得分:0 
这不是我的吗?

每一个不曾起舞的日子,都是对未来的一种辜负......
2010-04-14 22:21
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:0 
以下是引用树上月在2010-4-14 22:21:57的发言:

这不是我的吗?
呵呵 ,仔细看看有什么区别呢

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-15 09:35
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
楼主的 Node * next;  不对  定义结构体的应该这样写
typedef struct Node
{
    int data;
    struct Node *next;
}InitList;

Discuz!  
好好学习  天天向上
2010-04-17 22:39
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
收藏
得分:0 
可以这样写:在Vc的工程下可以运行!!!!

每一个不曾起舞的日子,都是对未来的一种辜负......
2010-04-18 15:39
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
还行吧~~~
2010-04-19 19:31
刘剑龙
Rank: 1
来 自:四川
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-5-17
收藏
得分:0 
为什么我在VC++上运行时不能插入数据呢,提示为不能为read,请问什么原因啊?
2010-05-17 22:06
快速回复:刚学数据结构
数据加载中...
 
   



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

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