数据分析实现单链表,数据结构中如何建立单链表的问题
来源:整理 编辑:国外旅游攻略 2023-08-30 17:11:29
1,数据结构中如何建立单链表的问题
问问上整天看见不劳而获要跟人要代码去应付作业的学生, 第一次看见说要好好学的,我顶你,呵呵
上面第一段不是 "创建了" 一个单链表, 而是 "定义了" 一个单链表的一个节点, main()里面第一句是创建了一个空的单链表(实际上就是定义个指向节点的指针), 这两个代码确实是实现了单链表,你输入字符,不断连到链表里.你输入 abcd$
就创建了一个4个节点的单链表了.
2,数据结构中创建一个单链表的操作
LinkList creatList(LinkList L,int n)
{
LinkList p; int i;
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
printf("\n");
return L;
}
3,数据结构单链表
#ifndef LISTNODE_H#define LISTNODE_Htemplate<typename NODETYPE>class ListNode friend class List<NODETYPE>; public: ListNode(const NODETYPE &); NODETYPE getData() const; private: NODETYPE data; ListNode<NODETYPE> *nextPtr;};
template<typename NODETYPE>ListNode<NODETYPE>::ListNode(const NODETYPE &info) :data(info),nextPtr(0)}
template<typename NODETYPE>NODETYPE ListNode<NODETYPE>::getData() constreturn data;}#endif
4,数据结构怎么创建一个简单的单链表
typedef struct Node strNode;struct Node void *pData; //节点的数据 strNode *next; //下一个节点的位置};//上面声明了一个节点的数据结构//首先定义一个链表的头,可以是实体,也可以是指针。strNode *pHead = NULL;//创造一个新节点strNode *strNode_New() return malloc(sizof(strNode));}//初始化一个新节点void strNode_Init(strNode *pNode) if(pNode->pData)free(pNode->pData); pNode->next = NULL;}//在链表尾部增加一个新节点bool strNode_Add(strNode *pHead, strNode *pNew) strNode pNode = pHead; strNode *pTail = while(pNode->next)pNode=pNode->next; pTail->next = pNew; }//删除的你就自己做吧p=l 是将函数参数中的链表头结点指针l(参数,显然有具体的值,就指向传入的链表). while语句的作用是找到要插入结点的位置, while(p&&j<pos-1)是说,只要p满足不为空(即p仍然指向当前链表的某个结点)而且下标记录j没有遍历到要插入结点的下标(参数中的pos),就执行 通过while就会找到要插入结点的指针 if(!p||j>pos-1)是说,如果p为空(即p一直下移到了链表最后一个结点的next显然为空了)或者下标记录j大于要插入结点的下标(比如你指定的在4号 [注意参数中的pos是从1开始的,那pos=4号位置对应j下标为3] 位置插入新结点pos=4,此时下标记录j已经遍历到了4 [注意函数体中的j对应的是下标即从0开始的] 超过了3就说明你给定的pos已经超过了链表的结点数了 最后,p和!p:由于p是指针,那么它就有两种状态,指空和不指空, if(p)则p不为空才满足条件为真,p为空条件为假 if(!p)则p为空,(显然,那么!p就不为空)满足条件,条件为真
5,数据结构上机实验编程单链表的基本操作
#include#include typedef struct node{ int data; struct node *next; }*Linklist,Node; Linklist creat(int n) {Linklist head,r,p; int x,i; head=(Node*)malloc(sizeof(Node)); r=head; printf("输入数字:\n"); for(i=n;i>0;i--) {scanf("%d",&x); p=(Node*)malloc(sizeof(Node)); p->data=x; r->next=p; r=p;} r->next=NULL; return head; } void output(Linklist head) {Linklist p; p=head->next; do{ printf("%3d",p->data);p=p->next; }while(p); printf("\n"); } void paixu(Linklist head) {Linklist p,q,small;int temp; for(p=head->next;p->next!=NULL;p=p->next) {small=p; for(q=p->next;q;q=q->next) if(q->datadata) small=q; if(small!=p) {temp=p->data; p->data=small->data; small->data=temp;} } printf("输出排序后的数字:\n"); output(head); } void main() {Linklist head; int x,j,n; printf("输入数字的个数(n):\n"); scanf("%d",&n); head=creat(n); printf("输出数字:\n"); output(head); printf("已排序的数字:\n"); paixu(head); }void main() int i,e; struct node *l,*s,*p; l=(struct node*)malloc(sizeof(struct node)); if(!l) printf("error!\n"); l->next=null;/*初始化空链表*/ while(i<10) e=a[i]; insert(l,e); }/*依次将数组读入,生成一个升序的单链表*/ //对单链表实现就地逆置template void mylist::invert()//翻转 { if ( isnull() || ncount == 1) return; listnode* m,* n; m = first; while (m!=null) { listnode* r = n; n = m; m = m->link; n->link = r; } first = n; } printf("please insert a int number(-32768~32767):"); scanf("%d",&e); /*从键盘输入一个数据*/ insert(l,e);/*插入到链表的适当位置,并保持链表的有序性*/ output(l);/*打印单链表*/ }
文章TAG:
数据 数据分析 分析 实现 数据分析实现单链表