自己练习时写的,说不定有错误,若有,请指出。 // 链表操作_C语言.cpp : 定义控制台应用程序的入口点。 // #include <stdlib.h> #include <malloc.h> #include <stdio.h> /*typedef int Tpye;//数据类型*/ typedef struct tagNode { int date; //数据域(数据结构) struct tagNode* pNext;//指针域(存储关系) }Node,*PNode; //函数申明 PNode create_list(void);//手动输入创建链表 PNode copyArray_list(const int* arr,const int& n); //利用数组创建链表 bool is_empty(PNode pHead);// int length_list(PNode pHead);// void traverse_list(PNode pHead);//遍历链表 bool insert_list(PNode pHead,const int& pos,const int& val);//在pHead所指向链表的第pos个节点的前面插入一个新的结点, //该节点的值是val, 并且pos的值是从1开始 bool delete_list(PNode pHead,const int& pos,int* pval);//删除链表第pos个节点, 并且pos的值是从1开始 //并将删除的结点的值存入pval所指向的变量中, void sort_list(PNode pHead);//冒泡排序 int _tmain(int argc, _TCHAR* argv[]) { //int arr[12]={1,2,3,4,35,10,9,8,7,6,1,22}; PNode pHead=NULL; //pHead=copyArray_list(arr,12); pHead=create_list(); traverse_list(pHead); //printf("%d/n",length_list(pHead)); //printf("%d/n",is_empty(pHead)); // insert_list(pHead,8,99); // traverse_list(pHead); // int val_del; // delete_list(pHead,3,&val_del); // traverse_list(pHead); sort_list(pHead); traverse_list(pHead); return 0; } PNode create_list() { int len;// int i; int val;// PNode pHead=(PNode)malloc(sizeof(Node)); if (NULL == pHead) { printf("malloc false/n"); exit(-1); } PNode pTemp=pHead; pHead->pNext=NULL; printf("please input list's length: "); scanf_s("%d",&len); for (i=0;i<len;i++) { printf("input %d value: ",i+1); scanf_s("%d",&val); PNode pNew=(PNode)malloc(sizeof(Node)); if (NULL == pNew) { printf("malloc false/n"); exit(-1); } pNew->pNext=NULL; pTemp->pNext=pNew; pNew->date=val; pTemp=pTemp->pNext;//pTemp=pNew; } return pHead; } PNode copyArray_list(const int* arr,const int& n) { int i; PNode pHead=(PNode)malloc(sizeof(Node)); if (NULL == pHead) { printf("malloc false/n"); exit(-1); } PNode pTemp=pHead; pHead->pNext=NULL; for (i=0;i<n;i++) { PNode pNew=(PNode)malloc(sizeof(Node)); if (NULL == pNew) { printf("malloc false/n"); exit(-1); } pNew->pNext=NULL; pTemp->pNext=pNew; pNew->date=arr[i]; pTemp=pTemp->pNext;//pTemp=pNew; } return pHead; } void traverse_list(PNode pHead) { PNode pTemp=pHead->pNext; printf("【"); while (NULL != pTemp) { printf("%d ",pTemp->date); pTemp=pTemp->pNext; } printf("】/n"); } bool is_empty(PNode pHead) { return (NULL == pHead->pNext) ? true : false; } int length_list(PNode pHead) { int len=0; PNode pTemp=pHead->pNext; while(NULL != pTemp) { len++; pTemp=pTemp->pNext; } return len; } bool insert_list(PNode pHead,const int& pos,const int& val) { int len=length_list(pHead); if (NULL == pHead || pos<1 || pos >len+1) //位置检查 { return false; } int i; PNode pTemp=pHead; for (i=1;i<pos;i++) { pTemp=pTemp->pNext; } PNode pNew=(PNode)malloc(sizeof(Node)); if (NULL == pNew) { printf("malloc false/n"); exit(-1); } pNew->date=val; pNew->pNext=pTemp->pNext; pTemp->pNext=pNew; return true; } bool delete_list(PNode pHead,const int& pos,int* pval) { int len=length_list(pHead); if (NULL == pHead || pos<1 || pos >len) //位置检查 { return false; } int i; PNode pTemp=pHead; for (i=1;i<pos;i++) { pTemp=pTemp->pNext; } PNode p=pTemp->pNext; pTemp->pNext=pTemp->pNext->pNext; *pval=p->date; free(p); return true; } void sort_list(PNode pHead) { if (is_empty(pHead)) { return; } PNode p1=NULL; PNode p2=NULL; for (p1=pHead->pNext;p1->pNext != NULL;p1=p1->pNext) { for (p2=p1->pNext;p2 != NULL;p2=p2->pNext)//for (p2=p1->pNext;p2->pNext != NULL;p2=p2->pNext)错误,最后一个元素没比较 { if (p1->date > p2->date) { int temp=p1->date; p1->date=p2->date; p2->date=temp; } } } return; }