c语言商品管理系统用单链表实现插入功能

如题所述

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

typedef struct node{
char no[20];//存放编号
char name[40];//存放名称
int reserve;//库存
struct node *next;
}NODE;

typedef struct link{
NODE *front;//头指针
NODE *rear;//尾指针
}LINK;

NODE *create_node(void){
NODE *node = (NODE *)malloc(sizeof(NODE));
printf("请输入货物编号:");
gets(node->no);
printf("请输入货物名称:");
gets(node->name);
printf("请输入货物名称:");
char ch;
while( (ch= getchar()) != '\n');//rewind(stdin);
scanf("%d",&node->reserve);
node->next = NULL;
return node;
}

void init_link(LINK *link){
link->rear = NULL;
link->front = NULL;
}

int link_empty(LINK *link){
return link->front == NULL ? 1: 0;
}

int node_num(LINK *link){
int num = 0;
if( link_empty(link)){
return num;
}
num = 1;
NODE *node = link->front;
while(node != link->rear){
node = node->next;
++num;
}
return num;
}

/*NODE *node_find(LINK *link,const int n){
int num = node_num(link);
if(num < n){
printf("公有节点%d个,无法找到第%d个节点\n",num,n);

}
else{

}
}
*/
void node_push(LINK *link){
NODE *node = create_node();
if(link->front == NULL){
link->front = node;
link->rear = node;
node->next = NULL;
}
else{
link->rear->next = node;
link->rear = node;
node->next = NULL;
}
}

void node_insert(LINK *link,const int n){
int num = 0,i = 1;
NODE *node = link->front;
NODE *new_node = NULL;
if ( link_empty(link) ){
printf("链表为空,将建立链表!\n");
node_push(link);
}
else{
if( n <= 1){
printf("在链表头插入数据\n");
new_node = create_node();
new_node->next = link->front;
link->front = new_node;
}
else if( n>= num = node_num(link) ){
printf("节点数少于%d,将在末尾插入节点.\n",n);
node_push(link);
}
else{
printf("在第n个节点后插入数据\n");
if(num >= n){
while( i != n){
node = node->next;
++i;
}
new_node = create_node();
new_node-next = node->next;
node->next = new_node;
}
}
}

void find_node_insert(LIKNK *link,const char *name){
NODE *node = link->front;
if( link_empty(link) )
node_push(link);
else {
while(strcmp(node->name,name) != 0){
 if(node != link->rear)
node = node->next;
else break;

}
if(node != NULL){

NODE *new_node = create_node();
new_node-next = node->next;
node->next = new_node;
}
else {
printf("没有找到相关货物,将在头节点插入数据\n");
intsert(link,0);
}
}
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网