一段C 线性表 链式单向存储

C、C++和Java语言
回复
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28
送出感谢: 0
接收感谢: 0

一段C 线性表 链式单向存储

#1

帖子 flyinflash » 2008-03-24 23:09

代码: 全选

// unidirectional link store type of linear list
// 线性表单向链式存储

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct ull_node
{
  char name[strlen("爱新觉罗")];
  struct ull_node *next_node;
} ull_node, *ulink_list;

ulink_list create_list(ulink_list head)
{
  int i;
  ulink_list new_node, tmp;
  
  //char tmp[2];
  char tmp_name[strlen("爱新觉罗")];
  
  i = 1;
  
  printf("\n 输入姓名,输入数字 0 结束 \n");
  
  printf("\n %d. ", i++);
  fflush(stdin);
  scanf("%s", tmp_name);
  
  //tmp = (ulink_list)malloc(sizeof(ull_node));
  tmp = head;
  
  while  (strcmp(tmp_name, "0") != 0)
  {
    new_node = (ulink_list)malloc(sizeof(ull_node));
    
    strcpy(new_node->name, tmp_name);
    new_node->next_node = NULL;
     
    tmp->next_node = new_node;
    tmp = new_node;
    
    printf("\n %d. ", i++);
    fflush(stdin);
    scanf("%s", tmp_name);
  }
   
  return head;
}

void print_list(ulink_list head)
{
  ulink_list tmp_node;
  int i = 0;
  
  tmp_node = head->next_node;
  while (tmp_node != NULL)
  {
    i++;
    printf("\n %d. %s ", i, tmp_node->name);
    tmp_node = tmp_node->next_node;
  }
    
  printf("\n");
  printf("\n 按下回车继续 \n");
  getchar();
  
}

ulink_list insert_list(ulink_list head)
{
  int i;
  int boollock;
  ulink_list new_node, tmp;
  
  //char tmp[2];
  char tmp_name[strlen("爱新觉罗")];
  
  i = 1;
  boollock = 0;
  
  printf("\n 输入姓名,输入数字 0 结束 \n");
  
  printf("\n %d. ", i++);
  fflush(stdin);
  scanf("%s", tmp_name);
  
  //tmp = (ulink_list)malloc(sizeof(ull_node));
  tmp = head;
  
  while  (strcmp(tmp_name, "0") != 0)
  {
    new_node = (ulink_list)malloc(sizeof(ull_node));
    
    strcpy(new_node->name, tmp_name);
    new_node->next_node = NULL;
     
    tmp->next_node = new_node;
    tmp = new_node;
    
    printf("\n %d. ", i++);
    fflush(stdin);
    scanf("%s", tmp_name);
  }
   
  return head;
}

int main(int argc, char **argv)
{
  ulink_list create_list(ulink_list head);
  void print_list(ulink_list head);
  ulink_list insert_list(ulink_list head);
        
  char key[2];
  
  ulink_list head;
  head = (ulink_list)malloc(sizeof(ull_node));
  head->next_node = NULL;
  
  printf("\n");
  printf("\n    线性表单向链式存储示例 \n");
  printf("\n");
  create_list(head);
  
  do
  {
    printf("\n");
    printf("\n");
    printf("\n 1. 初始化|新建表 ");
    
    printf("\n 9. 打印 ");
    printf("\n");
    
    printf("\n 0|q 退出 ");
    printf("\n");
    printf("\n   ");
    scanf("%1s", key);
    getchar();
    
    switch(key[0])
    {
      case '1':
        create_list(head);
        break;
  
      case '9':
        print_list(head);
        break;
      
      case 'q':
      case '0':
        goto QUIT_FLAG;
        break;
        
      default:
        printf("\n %c:找不到命令 ", key[0]);
        printf("\n");
        break;
    }
    
  } while ( (key[0] <= '9') && (key[0] > '0') );
  
  
  QUIT_FLAG:
  
  return 0;
  
}


1、记住,注意跟综链尾的指针指向
2、细心,细心,再细心
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28
送出感谢: 0
接收感谢: 0

#2

帖子 flyinflash » 2008-03-24 23:12

另,getch 那段鬼东西还是想不明白
knobel
帖子: 32
注册时间: 2007-04-26 10:37
送出感谢: 0
接收感谢: 0

#3

帖子 knobel » 2008-03-26 13:33

具体有什么用途吗
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#4

帖子 BigSnake.NET » 2008-03-26 13:45

是数据结构练习吧
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
Strange
帖子: 1823
注册时间: 2006-05-19 9:54
来自: Shanghai
送出感谢: 2 次
接收感谢: 10 次

#5

帖子 Strange » 2008-03-26 14:07

恩,总算在学习了 :D
ニンニク入れますか?
x60 with gentoo
头像
bird
帖子: 765
注册时间: 2006-09-04 10:45
送出感谢: 0
接收感谢: 0
联系:

#6

帖子 bird » 2008-03-26 17:38

语言里都有封装好的了,知道怎么回事最好,不知道也问题不大(我指的是做普通的应用开发)
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28
送出感谢: 0
接收感谢: 0

#7

帖子 flyinflash » 2008-03-26 21:48

回6楼的,一知半解,害死人滴。

getchar 的那个问题,问了 N 个人, N 个人都不知道是怎么回事。我正打算问问 RMS 和 Linus 到底是怎么回事
tongttt
帖子: 444
注册时间: 2007-11-27 22:20
送出感谢: 0
接收感谢: 0
联系:

#8

帖子 tongttt » 2008-03-26 22:09

搂住很强大
回复

回到 “C/C++/Java”