C语言数据结构_链表的实现
来源:互联网 发布:c语言输入10个数排序 编辑:程序博客网 时间:2024/04/25 18:04
#include "stdio.h"
#include <malloc.h>
#include "stdlib.h"
typedef struct Node{
int data;
struct Node *pNext;
}NODE,*PNODE; //NODE 等价于struct Node
//PNODE 等价于struct Node *;
void sort(PNODE pHead);
PNODE createList();
void traverseList(PNODE pNode);
int getLength(PNODE pHead);
bool insert(PNODE pHead,int pos,int val);
bool deleteElement(PNODE pHead,int pos,int *val);
int main(void){
PNODE pHead = NULL;
int len;
int temp;
pHead = createList();
traverseList(pHead);
len = getLength(pHead);
printf("链表的长度是:%d\n",len);
sort(pHead);
traverseList(pHead);
printf("请输入要插入的元素:\n");
scanf("%d",&temp);
insert(pHead,4,temp);
printf("插入元素后的输出:\n");
traverseList(pHead);
if (deleteElement(pHead,4,&temp))
{
printf(" 删除元素成功!它的值为:%d\n",temp);
}else{
printf(" 删除元素失败!");
}
return 0;
}
//创建链表
PNODE createList(){
int len;
int i ;
int val;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if(NULL == pHead){
printf("内存分配失败!!");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
printf("len=");
scanf("%d",&len);
for(i=0;i<len;++i){
printf("请输入第%d个节点的值",i+1);
scanf("%d",&val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew){
printf("动态内存分配失败,程序终止!\n");
exit(-1);
}
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
//遍历链表
void traverseList(PNODE pHead){
PNODE q;
q = pHead->pNext;
while (q!=NULL)
{
printf("%d ",q->data);
q = q->pNext;
}
printf("\n");
}
//获得链表的长度
int getLength(PNODE pHead){
int i =0;
while(pHead->pNext != NULL){
pHead=pHead->pNext;
++i;
}
return i;
}
//链表的排序
void sort(PNODE pHead){
int i ,j ,t;
PNODE p,q;
int len;
len = getLength(pHead);
for ( i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext)
{
for (j = i+1,q=p->pNext;j<len;j++,q=q->pNext)
{
if (p->data>q->data)
{
t = p->data;
p->data=q->data;
q->data = t;
}
}
}
}
/************************************************************************/
/* 插入元素
/*1. 获得插入位置的指针
/*2. 判断插入的位置是否合法
/*3. 完成元素的插入
/************************************************************************/
bool insert(PNODE pHead,int pos,int val){
int i = 0 ;
PNODE p = pHead;
while (NULL != p && i<pos-1)
{
p = p->pNext;
++i;
}
if (i>pos-1 || NULL == p)
return false;
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("动态内存分配失败!\n");
exit(-1);
}
pNew->data = val;
PNODE q = p->pNext;
p->pNext = pNew;
pNew->pNext = q;
return true;
}
/************************************************************************/
/* 删除元素
/*1. 获得插入位置的指针
/*2. 判断插入的位置是否合法
/*3. 完成元素的插入
/************************************************************************/
bool deleteElement(PNODE pHead,int pos,int *pVal){
int i = 0 ;
PNODE p = pHead;
while (NULL != p->pNext && i<pos-1)
{
p = p->pNext;
++i;
}
if (i>pos-1 || NULL == p->pNext)
return false;
PNODE q = p->pNext;
*pVal = q->data;
p->pNext = p->pNext->pNext;
free(q);
q = NULL;
return true;
}
- C语言数据结构_链表的实现
- C语言实现数据结构的链表
- 数据结构 链表的实现(C语言)
- 数据结构的C实现_顺序表
- c语言_数据结构_单向循环链表
- c语言_数据结构_双向循环链表
- c语言_数据结构_双向循环链表
- c语言_数据结构_顺序表
- 数据结构的C实现_单向链表
- 数据结构的C实现_双向循环链表
- <数据结构>链栈的C语言实现
- [c语言]数据结构 顺序表的实现
- [数据结构]C语言链表实现
- 【数据结构】C语言实现顺序链表
- 【数据结构】C语言实现链表
- C语言数据结构-栈-链表实现
- C语言实现LinkedList链表数据结构
- [数据结构]C语言链表实现
- Openstack 12.04 安装后 nova些列命令报错:ERROR: string indices must be integers, not str
- 关于Name和Caption属性的理解
- 自定义Adapter实现多视图Item的ListView
- 如何静态化JSP页面
- Linux下Gcc生成和使用静态库和动态库详解(转)
- C语言数据结构_链表的实现
- 浅学设计模式之命令<command>模式
- XML 与 Java 技术: 用 Castor 进行数据绑定
- 中介者模式(Mediator Pattern)
- EditPlus的配置
- birt报表中设置数据集sql的问题,希望有人帮我解决这个疑问,不胜感激!
- linux----pci子系统
- 关于matlab横坐标修改下标的问题讨论总结
- 教你认识显卡