|
|
#2
mywaylgh2010-04-14 17:26
不是高手.... 但按我的编程习惯是这样的:
#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; } |
刚刚学完数据结构中的单链表。所以就编了一个简单的单链表;有什么不好的地方,希望高手指出:
// 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;
}
