当前位置:首页 > 链表的增删改查
# include
typedef struct Node {
PNODE create_list(void);//创建链表
void traverse_list(PNODE pHead);//遍历链表 bool is_empty(PNODE);//判断链表是否存在 int length_list(PNODE);//判断链表长度
bool insert_list(PNODE, int , int);//在pHead所指向链表的第pos个节点的前面插入一个新的结点,该节点的值是val,并且pos的值从1开始 bool delete_list(PNODE, int, int *);//删除数据 void sort_list(PNODE);//将链表排序 int main() {
pHead = create_list();//creaet_list()创建一个单循环链表,并将链表的头结点的地址付给pHead traverse_list(pHead); int len = length_list(pHead); printf(\链表长度是%d\\n\sort_list(pHead); traverse_list(pHead);
//insert_list(pHead, 2, 9);//增加数据 if(delete_list(pHead, 4, &val)) { } else { }
traverse_list(pHead);
printf(\删除失败!你删除的元素不存在\printf(\删除成功,你删除的元素是:%d\\n\
PNODE pHead = NULL;//等价于 struct Node * pHdad = NULL; int val;
int data;//数据域
struct Node * pNext;//指针域
}NODE, * PNODE;//NODE等价于struct Node PNODE等价于struct Node *
}
PNODE create_list(void) {
PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL==pHead) {
printf(\分配失败,程序终止\\n\exit(-1); }
printf(\请输入您需要生成的链表节点的个数:len = \scanf(\for(i=0; i printf(\请输入第%d个节点的值\ i+1); scanf(\PNODE pTail = pHead; pTail->pNext = NULL; int len; int i; int val; PNODE pHead = (PNODE)malloc(sizeof(NODE)); if(NULL==pHead) { } printf(\分配失败,程序终止\\n\exit(-1); /* if(is_empty(pHead)) else */ printf(\链表不为空!\\n\printf(\链表为空!\\n\ } } pNew->data = val; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; return pHead; void traverse_list(PNODE pHead) { } bool is_empty(PNODE pHead) { } int length_list(PNODE pHead) { PNODE p = pHead->pNext; int len = 0; while (NULL != p) { } return len; ++len; p = p->pNext; if(NULL == pHead->pNext) else return false; return true; PNODE p = pHead->pNext; while (NULL != p) { } printf(\return; printf(\ \p = p->pNext; } void sort_list(PNODE pHead) { } //在pHead所指向链表的第pos个节点的前面插入一个新的结点,该节点的值是val,并且pos的值从1开始 bool insert_list(PNODE pHead, int pos, int val) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL ==pNew) if(i>pos-1 || NULL==p) return false; while (NULL != p && i p = p->pNext; ++i; int i = 0; PNODE p = pHead; int i, j, t; int len = length_list(pHead); PNODE p, q; for (i=0, p=pHead->pNext; i for (j=i+1, q=p->pNext; j if(p->data > q->data) { } t = p->data;//类似于数组中德: t = a[i]; p->data = q->data;//类似于数组中德: a[i] = a[j]; q->data = t;//类似于数组中德: a[j]= t; } { } pNew->data = val; PNODE q = p->pNext; p->pNext = pNew; pNew->pNext = q; return true; printf(\动态分配内存失败!\\n\exit(-1); bool delete_list(PNODE pHead, int pos, int * pVal) { } //删除p节点后面的节点; p->pNext = p->pNext->pNext; free(q); q = NULL; return true; if(i>pos-1 || NULL==p) return false; PNODE q = p->pNext; *pVal = q->data; while (NULL != p && i p = p->pNext; ++i; int i = 0; PNODE p = pHead;
共分享92篇相关文档