您的位置:首页 > 理论基础 > 数据结构算法

数据结构-实现链表

2011-11-08 13:36 471 查看
 
#include <stdio.h>

#include <string.h>

#include <stdlib.h>

/*

若爱,请深爱;若弃,请彻底。不要暧昧,伤人伤己

(1)不应该牺牲程序的可读性

*/

/*

(1)pTail->next = pNew; //新构造的结点挂到指定结点

(2)append_list()函数中:对p->next判空

(3)注意尾结点指针域设置为NULL

*/

//定义数据类型,并为其分配内存

#define NODE_LEN sizeof(NODE)

typedef struct Node

{

 float value;

 struct Node * next;

}* PNODE, NODE;

PNODE create_list(); //构造一个指定长度的链表

void traverse_list(PNODE pHead); //遍历链表

bool append_list(PNODE pHead, float value); //追加结点值

bool insert_list(PNODE pHead, int pos, float value); //指定位置插入结点值

int main(void)

{

 PNODE pHead = NULL; //定义头指针

 printf("pHead指针的内存空间长度:%d \n", sizeof(pHead));

 pHead = create_list();

 

 traverse_list(pHead);

 

 append_list(pHead, 100);

 traverse_list(pHead);

 insert_list(pHead, 2, 80);

 traverse_list(pHead);

 append_list(pHead, 100);

 traverse_list(pHead);

 return 0;

}

PNODE create_list()

{

 int len; //链表的长度

 float value; //临时节点值

 

 printf("请输入链表的长度:");

 scanf("%d", &len);

 PNODE pHead = (PNODE)malloc(NODE_LEN); //分配一个不存放有效数据的头结点

 

 //判空

 PNODE pTail = pHead;

 for(int i = 0; i < len; i++)

 {

  printf("请输入当前节点的值:");

  scanf("%f", &value);

  

  PNODE pNew = (PNODE)malloc(NODE_LEN);

  //判空

  

  pNew->value = value;

  pTail->next = pNew; //新构造的结点挂到

  pNew->next = NULL;

  pTail = pNew; //新构造的结点转化为尾巴结点

 }

 

 return pHead;

}

void traverse_list(PNODE pHead)

{

 PNODE p = pHead->next;

 while(NULL != p)

 {

  printf("%f \t", p->value);

  p = p->next;

 }

 printf("\n");

}

bool append_list(PNODE pHead, float value)

{

 PNODE p = pHead->next;

 while(NULL != p)

 {

  if(NULL == p->next)

  {

   break;

  }

  p = p->next; //此时p结点就是空节点

 }

 PNODE pNew = (PNODE)malloc(NODE_LEN);

 pNew->value = value;

 p->next = pNew;

 pNew->next = NULL;

 return true;



bool insert_list(PNODE pHead, int pos, float value)

{

 int count = 1; //计数器

 

 PNODE p = pHead->next;

 while(NULL != p)

 {

  count++;

  if(count == pos)

  {

   break;

  }

  p = p->next;

 }

 PNODE pNew = (PNODE)malloc(NODE_LEN);

 pNew->value = value;

 pNew->next = p->next;

 p->next = pNew;

 return true;

}      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息