标题:线性表的链式存储 感兴趣的都来一下吧!
只看楼主
hanyong6668
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-3-29
结帖率:0
已结贴  问题点数:20 回复次数:3 
线性表的链式存储 感兴趣的都来一下吧!
我们刚刚学了 线性表的链式存储  然后上实验课  都打不出来  打出来了还错误百出  希望你们给我一个源程序 就是 完整的 数据结构!  谢谢
搜索更多相关主题的帖子: 链式 兴趣 线性 
2010-03-29 10:50
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:20 

源程序?源程序?
源程序?源程序?
这里 www.baidu.com
2010-03-29 18:15
流星1046
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-4-20
得分:0 
实现单链表的创建,查询,插入,删除,两个单链表的归并

//以下是头函数,文件名为myhead.h
#ifndef MYHEAD_H
#define    MYHEAD_H
#include<iostream>
using namespace std;
struct node
{
    int data;
    node *next;
};
class List
{
    node *first;
public:
    List();
    List(int n);
    int Getelem(int k);
    void Listinsert(int m,int k);
    int Delete(int k);
    void Mergelist(List &la,List &lb,List &lc);
    void print();
};
#endif

//以下为头函数中List类中成员函数的定义,文件名为 list.cpp
#include"myhead.h"
List::List()
{
        first=new node;
        first->next=NULL;
}
List::List(int n)
{
        first=new node;
        
        first->next=NULL;
        int num;
        int a[50];
        int i;
        cout<<"请依次输入单链表元素:"<<endl;
        for(i=0;i<n;i++)
        {
            cin>>num;
            a[i]=num;
        }
        for(i=n-1;i>=0;i--)
        {
            
            node *head;
            head=new node;
            head->data=a[i];
            head->next=first->next;
            first->next=head;
        }
}
int List::Getelem(int k)
{
    node *p;
    p=first->next;
    int j=1;
    while(p&&j<k)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>k)
        return false;
    return p->data;
}
void List::Listinsert(int k,int m)
{
    node *s;
    node *p;
    s=new node;
    s->data=m;
    p=first->next;
    int j=1;
    while(p&&j<k-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>k)
        throw    "位置";
    s->next=p->next;
    p->next=s;
}
int List::Delete(int k)
{
    node *p;
    node *q;
    p=first->next;
    int j=1;
    while(p&&j<k-1)
    {
        p=p->next;
        j++;
    }
    q=p->next;
    int m=q->data;
    p->next=q->next;
    free(q);
    return m;
}
void List::Mergelist(List &la,List &lb,List &lc)
{
    node *pa,*pb,*pc;
    pa=la.first->next;
    pb=lb.first->next;
    lc.first=pc=la.first;
    while(pa&&pb)
    {
        if(pa->data<=pb->data)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else
        {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
    }
    pc->next=pa?pa:pb;
    free(lb.first);
}
void List::print()
{
    node *p;
    p=first->next;
    while(p)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}

//以下为主函数
#include"myhead.h"
void main()
{
    int n;
    cout<<"请输入单链表的元素个数:"<<endl;
    cin>>n;
    List la(n);
    cout<<"单链表已建立,为:"<<endl;
    la.print();
    cout<<"请输入你要查找的位置"<<endl;
    cin>>n;
    cout<<"你要查找的元素为:"<<la.Getelem(n)<<endl;
    int num;
    cout<<"请输入你要插入的位置和数字"<<endl;
    cin>>num>>n;
    la.Listinsert(num,n);
    la.print();
    cout<<"请输入你要删除的位置:"<<endl;
    cin>>n;
    cout<<"你要删除的元素为:"<<la.Delete(n)<<endl;
    cout<<"删除后的单链表为:"<<endl;
    la.print();
    cout<<"输入新单链表的元素个数:"<<endl;
    cin>>n;
    List lb(n);
    cout<<"新单链表已建立,为:"<<endl;
    lb.print();
    List lc;
    lc.Mergelist(la,lb,lc);
    cout<<"两单链表归并后为:"<<endl;
    lc.print();
}
2010-04-20 19:26
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
得分:0 
呵呵。。。我也是刚刚学数据结构:下面是我写的(在工程下运行),里面包括,初始化,创建,插入,删除
                                                                                               
 // 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->date==number)
        return e+1;
    else
        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;
}

一起加油哦!!!!!!!!

/*// 遍历链表

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-20 21:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-300867-1-1.html




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

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