|
|
#2
hahayezhe2010-03-29 18:15
|
我们刚刚学了 线性表的链式存储 然后上实验课 都打不出来 打出来了还错误百出 希望你们给我一个源程序 就是 完整的 数据结构! 谢谢
|
|
#2
hahayezhe2010-03-29 18:15
![]() ![]() ![]() ![]() ![]() 源程序?源程序? 源程序?源程序? 这里 www.baidu.com |
|
|
#3
流星10462010-04-20 19:26
实现单链表的创建,查询,插入,删除,两个单链表的归并
//以下是头函数,文件名为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(); } |
|
|
#4
树上月2010-04-20 21:44
呵呵。。。我也是刚刚学数据结构:下面是我写的(在工程下运行),里面包括,初始化,创建,插入,删除
// 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; } |