编写算法,要求逐个输出单链表中所有的数据元素

作者&投稿:彤爸 (若有异议请与网页底部的电邮联系)
编写一个算法,逐个算出单链表中所有数据元素,设数据元素的数据类型为int型~

题主想问的是输出所有元素么?.....

这个程序主要是单链表的操作!
#include<iostream>
#include<iomanip>
using namespace std;
struct node{
double data;
struct node *next;
};

struct node *create();
struct node *rescreate();
void printlist(struct node *head);
int len(struct node *head);
void insertnode(struct node *head,int i,double x) ;
void delnode(struct node *head,double x);
void delnode2(struct node *head,int i);
void sort(struct node *head);

int main()
{
struct node *p;
p=rescreate();
printlist(p);
//cout<<endl<<len(p)<<endl;
insertnode(p,3,-100);
cout<<endl;
printlist(p);

delnode2(p,4);
cout<<endl;
printlist(p);

sort(p);
cout<<endl<<"After sort
";
printlist(p);


system("pause");
return 0;
}

struct node *create()
{
struct node *head,*oldp,*p,*s;
double newnum;
head=new struct node;
oldp=head;
cin>>newnum;
while(newnum!=-32768){
p=new struct node;
p->data=newnum;
oldp->next=p;
oldp=p;
cin>>newnum;
}
s=head;
head=head->next;
delete s;
p->next=head;

return head;

}

struct node *rescreate()
{
struct node *tail,*oldp,*p;
double newnum;
tail=NULL;
oldp=tail;
cin>>newnum;
while(newnum!=-32768){
p=new struct node;
p->data=newnum;
p->next=oldp;
oldp=p;
cin>>newnum;
}
return p;
}


void printlist(struct node *head)
{
while(head){
cout<<setw(5)<<head->data;
head=head->next;
}
}

int len(struct node *head)
{
int n=0;
while(head){
n++;
head=head->next;
}
return n;
}

//在单链表第 i(0=<i<=len(head)) 个结点之后插入一个新结点,其值为 x
void insertnode(struct node *head,int i,double x)
{
struct node *p,*s;
int j;
s=new struct node;
s->data=x;
if(i<0 || i>len(head))
cout<<"插入位置错误
";
if(i==0){
s->next=head;
head=s;
}
else{
p=head;
j=1;
while(p && j<i){
j++;
p=p->next;
}
if(p){
s->next=p->next;
p->next=s;
}
}
}

//删除单链表中一个 值为 x 的结点
void delnode(struct node *head,double x)
{
struct node *p,*s;
if(head->data==x){
p=head;
head=head->next;
delete p;
}
else{
s=head;
p=head->next;
while(p && p->data!=x){
s=p;
p=p->next;
}
if(p){
s->next=p->next;
delete p;
}
else
cout<<"找不到
";
}
}

//删除单链表中 第 i 的结点
void delnode2(struct node *head,int i)
{
struct node *p,*s;
int j;
if(i==1){
p=head;
head=head->next;
delete p;
}
else{
s=head;
p=head->next;
j=2;
while(p && j<i){
j++;
s=p;
p=p->next;
}

if(p){
s->next=p->next;
delete p;
}
else
cout<<"找不到
";
}
}

//单链表排序---起泡
void sort(struct node *head)
{
int i;
struct node *p,*s1,*s2;
double temp;
int n;
n=len(head);
p=head;
for(i=1;i<n;i++){
s1=p;
s2=p->next;
while(s2){
if(s1->data>s2->data){
temp=s1->data;
s1->data=s2->data;
s2->data=temp;
}
s1=s1->next;
s2=s2->next;
}
}
}
还有一个主要是单链表的建立,插入,排序等!
#include<iostream>
#include<iomanip>
using namespace std;
struct node{
float data;
node *next;
};

//正序建立单链表,数据依次插入链表头之后
node * create()
{
node *head,*p,*s;
float newnum;
head=new node;;
p=head;
cin>>newnum;
while(newnum>=0){
s=new node;
s->data=newnum;
p->next=s;
p=s;
cin>>newnum;
}
head=head->next; //删除头结点
p->next=NULL; //若为p->next=head; 则为循环单链表
return(head);
}

//逆序建立单链表,数据依次插入链表尾之前
node * reversecreate()
{
node *tail,*oldptr,*ptr;
float newnum;
ptr=NULL;
tail=ptr;
cin>>newnum;
while(newnum>=0){
oldptr=ptr;
ptr=new node;
ptr->data=newnum;
ptr->next=oldptr;
cin>>newnum;
}
return(ptr);
}

//打印链表
void printlist(node *listhead)
{
while(listhead!=NULL){
cout<<setw(5)<<listhead->data;
listhead=listhead->next;
}
}

//查找某个结点
void find(node *head,float x)
{
node *p;
p=head;
while(p->data!=x && p!=NULL)
p=p->next;
if(p!=NULL)
cout<<"找到了!
";
else
cout<<"未找到!
";
}

//求单链表的长度(结点个数)
int length(node *head)
{
int n=0;
node *p;
p=head;
while(p!=NULL){
p=p->next;
n++;
}
return n;
}

//在单链表中插入一个结点,其值为x,插入第i(i>=0)个结点之后
void insertnode(node *head,int i,float x)
{
node *s,*p;
int j;
s=new node;
s->data=x;
if(i==0){
s->next=head;
head=s;
}
else{
p=head;
j=1; //查找第i个结点,由p指向
while(p!=NULL && j<i){
j++;
p=p->next;
}
if(p!=NULL){
s->next=p->next;
p->next=s;
}
else
cout<<"未找到!
";
}
}

//在单链表中删除一个结点,其值为x
void deletenode(node *head,float x)
{
node *p,*s;
if(head==NULL)
cout<<"链表下溢!
";
if(head->data==x){
p=head;
head=head->next;
delete p;
}
else{
s=head;
p=head->next;
while(p!=NULL && p->data!=x)
if(p->data!=x){
s=p;
p=p->next;
}
if(p!=NULL){
s->next=p->next;
delete(p);
}
else cout<<"未找到!
";
}
}


int main( )
{

node *linktable;
cout<<"Input positive values, ends with a negative one
";
cout<<"The list of input values:
";
printlist(create());
printlist(reversecreate());
cout<<length(create());
linktable=create();
insertnode(linktable,2,100);
printlist(linktable);
cout<<endl<<length(linktable)<<endl;
deletenode(linktable,3);
printlist(linktable);
cout<<endl<<length(linktable)<<endl;
cin.get();
cin.get();
return 0;
}

typdef struct list
{
int date;
struct list *next;
}List;
typdef struct list *lnode;

Printf(List head)
{ List p;
p=head;
if (head==NULL)
printf("单链表为空!");
else
while(p->next!=NULL)
{
printf("%d",p->date);
p=p->next;
}
printf("%d",p->date);
}

可能具体的语句中有不符合格式的,但思路是这个样子的.


编写一个算法,逐个输出顺序表中所有数据元素。设数据元素的类型为int型...
编写的程序是:include <stdio.h> define maxsize 20 typedef int datatype;typedef struct{datatype data[maxsize];int last;}sequenlist;void CreateList(sequenlist *L,int n){int i;printf("please input n numbers\\n");for(i=0;i<n;i++){scanf("%d",&L->data[i]);(*L).last=...

如何用C语言编一个计算器?
一、问题分析:输入一行字母,那么会以换行结束。所以可以存入数组,也可以逐个输入,遇到换行结束。要统计各个类的个数,就要逐个判断是哪个分类的。由于在ASCII码中,数字,大写字母,小写字母分别连续,所以可以根据边界值判断类型。二、算法设计:1、读入字符,直到遇到换行结束。2、对于每个字符,判断是...

9.12编写一个程序,可以在命令行里接收用户输入的若干个字符串,将其按...
这个程序首先定义了一个字符串数组 strs 和一个临时字符串变量 s。程序使用 do-while 循环语句从键盘中接收输入的字符串,将这些字符串存储在 strs 数组中,直到用户输入 "exit" 为止。然后,程序调用 quickSort() 函数对字符串数组 strs 进行排序。在 quickSort() 函数中,使用快速排序算法对字符...

逐个试密码采用的是什么算法
DES算法,AES算法,IDEA算法。常用的主要有三种对称密码算法。DES算法二十世纪七十年代提出,曾经称霸对称加密领域30年。AES算法二十一世纪初提出用以取代DES算法。穷举法,或称为暴力破解法,是一种针对于密码的破译方法,即将密码进行逐个推算直到找出真正的密码为止。例如一个已知是四位并且全部由数字组成的...

写个算法(c语言)
\/* 单链表就地逆置算法 *\/ void converse(NODEPTR L){ NODEPTR p,q;p=L->next; q=p->next;L->next=NULL;while(p) \/* 对于当前结点p,用头插法将结点p插入到头结点之后 *\/ { p->next=L->next;L->next=p;p=q;q=q->next;} } 买一送一吧:--- --- \/* 单链表就地逆置的...

铺地锦的计算方法
1、首先,绘制一个矩形,并将其划分为m×n个小方格,其中m和n分别对应两个乘数的位数。2、接着,在矩形的上方和右侧分别写下这两个乘数。3、然后,用对角线将方格分为两个部分,在每个部分中记录乘积的十位和个位数字。4、接下来,将乘积从右下角到左上角沿对角线方向相加,每当相加结果超过10时...

算法基本特征
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、...

设计一个算法,要求判别一个算术表达式中的圆括号配对是否正确
1、先去掉字符串前面的空白字符,然后通过正则表达式将符合题目要求的数字型字符串解析出来,然后对数字串部分进行逐个处理。2、先判断第1位非空字符,如果不是+、- 或数字字符,则直接返回 0, 否则对其余字符进行遍历处理,此时,对于数字字符,需要进行越界判断,如果遇到非数字字符,直接跳出循环。3、...

逐个试密码采用的是什么算法
穷举法。密码爆破又叫暴力猜解,简单来说就是将密码逐个尝试,直到找出真正的密码为止,本质上是利用了穷举法,穷举法专业点讲是叫枚举法,枚举法的中心思想是逐个考察某类事件的所有相关情况,从而得出结论。

严蔚敏数据结构应该怎么学习。
简单情形不出错,则算法一般不会出错。图形结构:DFS:将图按照树形结构来处理,运用递归算法 BFS:将图按章线形结构来处理,运用迭代算法 必须会下面几个几个算法:(线形两个)1.将两个有序表合并为一个表,这个算法的变种很多,可以是链表,顺序表。涉及集合运算,归并排序,字符串处理。2.将一个...

舒兰市13254067345: 数据结构:单链表的遍历,要求设计算法依次输出链表中所有节点的值 -
杜诗新生: int traversal(Linklist &l) { if(!L) return 0; Lnode *p=l->next; while(p) { cout<<p->data; p=p->next; } return 1; }

舒兰市13254067345: 编写一个逐个输出单链表中所有数据元素的成员函数 -
杜诗新生: 您好,非常高兴回答您的问题: 逐一输出单链表的成员方法,可以用一个for循环,完成,为了算法简单,建议您在设计一个用于表示下一个结点的类(如next)的对象,和一个用于定位的index()的无返回值有形参的方法. 单独的逐个输出单链表中所有数据元素的成员函数及解释可以如下: public void print(){ //输出单链表 index(1); //将当前指针指向单链表第一个结点 for(int i=0;i

舒兰市13254067345: 算法设计:输出单链表中所有结点的值 -
杜诗新生: 这个算法难道还有什么窍门吗?我认为单链表应该就只有一种遍历方式吧.算法设计如下: 1. 建立节点类型的指针,并将指针指向链表头结点. 2. 打印该节点的数据域 3. 将指针指向该节点的下一个节点 4. 如果下个节点不为NULL,则循环进行第2和3步

舒兰市13254067345: 算法设计,输出带头结点的单链表中所有结点的值 -
杜诗新生: typedef struct NODE {struct NODE *next;void *value; } Node; typedef struct LINK {struct NODE *head; } Link; void value_output(void *value) {...... } void link_output(Link *link) {Node *curr = link->head;while (curr != NULL) {value_output(curr->value);curr = curr->next;} }

舒兰市13254067345: 数据结构 编写程序,通过单向链表来存储某个班级的所有学生信息,并打印输出所有学生的信息. -
杜诗新生: 1.main方法进栈内存,main方法中有基本数据类型变量int x;2.为main方法中的变量x赋值为3;3.调用change(x)方法,则change方法进栈;4.为change方法变量x赋值为4;5.跳出change方法,同时change方法出栈,释放所有change方法和change方法中的x,即把x=4释放掉;6.执行打印语句,些时的栈中只有main方法中的x,那么打印出的x=3;7.跳出main方法,结束程序.

舒兰市13254067345: 编写一个算法,将一个链表L的所有偶数位置的数据元素输出 -
杜诗新生: i=1;读第一个数 while (not 结束) { if (i是偶数) 输出 读下一个数 i++; }

舒兰市13254067345: 求一个显示单链表所有元素的函数 -
杜诗新生: void f(*h)//*h表示连表的头 { object *p,*q;//p,q表示两个结构的指针 p=h; while(p->next!=0)//p->next指向下一个结点,p- { printf("%d",p->int); p=p->next; } }不知道

舒兰市13254067345: 数据结构问题
杜诗新生: struct Node { int value; struct Node *pNext; }; void func(struct Node *pHead) { struct Node *pItem = pHead; while(pItem ) { printf( "Value: %d\n", pItem->value ); pItem = pItem->pNext; } }

舒兰市13254067345: 设计一个计算单链表(链表带头结点)中结点个数的算法,并依此输出链表中的元素的值 -
杜诗新生:[答案] #include#includetypedef struct node{int data;struct node *next;}node;void count(node* l)//计算节点个数,输出所有值{int n = 0;node* p = l->next;while(p){printf("%d ",p->data);p = p->next;n++;}printf("\...

舒兰市13254067345: 按元素的读入顺序建立单链表,并要求编写一个逆序输出表中各元素的递归算法. -
杜诗新生: viod CreatList(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;} } viod R_Print(LinkList L){if(...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网