c语言链表程序1002无标题,链表实例程序(C语言)

下面是用 C语言来实现链表的一个实例程序,具体细节如下:

#include

#include

#include

#include

struct node {

int data;

int key;

struct node *next;

};

struct node *head = NULL;

struct node *current = NULL;

//display the list

void printList(){

struct node *ptr = head;

printf("\n[ ");

//start from the beginning

while(ptr != NULL){

printf("(%d,%d) ",ptr->key,ptr->data);

ptr = ptr->next;

}

printf(" ]");

}

//insert link at the first location

void insertFirst(int key, int data){

//create a link

struct node *link = (struct node*) malloc(sizeof(struct node));

link->key = key;

link->data = data;

//point it to old first node

link->next = head;

//point first to new first node

head = link;

}

//delete first item

struct node* deleteFirst(){

//save reference to first link

struct node *tempLink = head;

//mark next to first link as first

head = head->next;

//return the deleted link

return tempLink;

}

//is list empty

bool isEmpty(){

return head == NULL;

}

int length(){

int length = 0;

struct node *current;

for(current = head; current!=NULL; current = current->next){

length++;

}

return length;

}

//find a link with given key

struct node* find(int key){

//start from the first link

struct node* current = head;

//if list is empty

if(head == NULL){

return NULL;

}

//navigate through list

while(current->key != key){

//if it is last node

if(current->next == NULL){

return NULL;

}else{

//go to next link

current = current->next;

}

}

//if data found, return the current Link

return current;

}

//delete a link with given key

struct node* delete(int key){

//start from the first link

struct node* current = head;

struct node* previous = NULL;

//if list is empty

if(head == NULL){

return NULL;

}

//navigate through list

while(current->key != key){

//if it is last node

if(current->next == NULL){

return NULL;

}else{

//store reference to current link

previous = current;

//move to next link

current = current->next;

}

}

//found a match, update the link

if(current == head) {

//change first to point to next link

head = head->next;

}else {

//bypass the current link

previous->next = current->next;

}

return current;

}

void sort(){

int i, j, k, tempKey, tempData ;

struct node *current;

struct node *next;

int size = length();

k = size ;

for ( i = 0 ; i < size - 1 ; i++, k-- ) {

current = head ;

next = head->next ;

for ( j = 1 ; j < k ; j++ ) {

if ( current->data > next->data ) {

tempData = current->data ;

current->data = next->data;

next->data = tempData ;

tempKey = current->key;

current->key = next->key;

next->key = tempKey;

}

current = current->next;

next = next->next;

}

}

}

void reverse(struct node** head_ref) {

struct node* prev = NULL;

struct node* current = *head_ref;

struct node* next;

while (current != NULL) {

next = current->next;

current->next = prev;

prev = current;

current = next;

}

*head_ref = prev;

}

main() {

insertFirst(1,10);

insertFirst(2,20);

insertFirst(3,30);

insertFirst(4,1);

insertFirst(5,40);

insertFirst(6,56);

printf("Original List: ");

//print list

printList();

while(!isEmpty()){

struct node *temp = deleteFirst();

printf("\nDeleted value:");

printf("(%d,%d) ",temp->key,temp->data);

}

printf("\nList after deleting all items: ");

printList();

insertFirst(1,10);

insertFirst(2,20);

insertFirst(3,30);

insertFirst(4,1);

insertFirst(5,40);

insertFirst(6,56);

printf("\nRestored List: ");

printList();

printf("\n");

struct node *foundLink = find(4);

if(foundLink != NULL){

printf("Element found: ");

printf("(%d,%d) ",foundLink->key,foundLink->data);

printf("\n");

}else{

printf("Element not found.");

}

delete(4);

printf("List after deleting an item: ");

printList();

printf("\n");

foundLink = find(4);

if(foundLink != NULL){

printf("Element found: ");

printf("(%d,%d) ",foundLink->key,foundLink->data);

printf("\n");

}else{

printf("Element not found.");

}

printf("\n");

sort();

printf("List after sorting the data: ");

printList();

reverse(&head);

printf("\nList after reversing the data: ");

printList();

}

如果我们编译并运行上述程序,那么这将产生以下结果 –

Original List:

[ (6,56) (5,40) (4,1) (3,30) (2,20) (1,10) ]

Deleted value:(6,56)

Deleted value:(5,40)

Deleted value:(4,1)

Deleted value:(3,30)

Deleted value:(2,20)

Deleted value:(1,10)

List after deleting all items:

[ ]

Restored List:

[ (6,56) (5,40) (4,1) (3,30) (2,20) (1,10) ]

Element found: (4,1)

List after deleting an item:

[ (6,56) (5,40) (3,30) (2,20) (1,10) ]

Element not found.

List after sorting the data:

[ (1,10) (2,20) (3,30) (5,40) (6,56) ]

List after reversing the data:

[ (6,56) (5,40) (3,30) (2,20) (1,10) ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值