单链表的建立、插入和删除

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单链表的建立、插入和删除

单链表的建立插入删除

#include

#include

/*线性表*/

struct TLink {

int data;

struct TLink * next;

};/*end struct TLink*/

/*生成新元素*/

struct TLink * new_item(int number)

{

struct TLink * r = 0;

r = (struct TLink *)malloc(sizeof(struct TLink));

r->data = number;

r->next = 0;

return r;

}/*end new_item*/

/*在线性表中查询数据*/

struct TLink * lookup(struct TLink * root, int number) {

struct TLink * h = root;

while(h) {

if (h->data == number) return h;

h = h->next ;

}/*end lookup*/

return 0;

}

/*在线性表中追加一个数据*/

void append(struct TLink * * root, int number)

{

struct TLink * r = 0, * n = 0;

if (!root) return ;

/*不记录重复元素*/

if (lookup(*root, number)) return;

/*如果表为空则新建表*/

r = *root;

if (!r) {

*root = new_item(number);

return ;

}/*end if*/

/*为保证为有序线性表,如果数据比表头还小则作为表头*/ if (number < r->data ) {

n = new_item(number);

n->next = r;

*root = n;

return ;

}/*end if*/

/*在有序线性表中查找位置插入元素*/

while(r) {

n = r->next ;

/*如果已经是表尾则直接追加*/

if (!n) {

n = new_item(number);

r->next = n;

return ;

}/*end if*/

/*在中央某处插入*/

if (number < n->data ) {

r->next = new_item(number);

r->next->next = n;

return ;

}/*end if*/

r = n;

}/*end while*/

}/*end append*/

/*打印有序线性表*/

void print(struct TLink * root)

{

struct TLink * r = root;

printf("【");

while(r) {

printf("%d ", r->data );

r = r->next ;

}/*end while*/

printf("\b】\n");

}/*end print*/

/*将有序线性表h1合并至有序线性表h0,并销毁线性表h1*/ void merge(struct TLink ** h0, struct TLink ** h1)

{

struct TLink * h = 0, * k = 0;

if (!h0 || !h1) return ;

h = *h1;

while(h) {

append(h0, h->data );

k = h;

h = h->next ;

free(k);

}/*end h*/

h1 = 0;

}

int main(void)

{

int i = 0; struct TLink * x=0, *y = 0;

int a[] = {8,4,3,9,5,1};

int b[] = {7,2,1,5,6,0};

printf("原数据为:\n数组A:【");

for(i = 0; i < 6; i++) {

printf("%d ", a[i]);

append(&x, a[i]);

}/*next*/

printf("\b】\n数组B:【");

for(i = 0; i < 6; i++) {

printf("%d ", b[i]);

append(&y, b[i]);

}/*next*/

printf("\b】\n转换为有序线性表\nA:");

print(x);

printf("B:");

print(y);

printf("AB合并后为:");

merge(&x, &y);

print(x);

return 0;

}

相关文档
最新文档