1. 程式人生 > 實用技巧 >C語言最簡單的雙向連結串列原始碼

C語言最簡單的雙向連結串列原始碼

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

typedef struct node
{
    char        name[20];
    struct node    *prior, *next;
} stud;


stud* creat( int n )
{
    stud    *p, *h, *s;
    int    i;
    h        = (stud *) malloc( sizeof(stud) );
    h->name[0]    = '\0';
    h->prior    = NULL;
    h
->next = NULL; p = h; for ( i = 0; i < n; i++ ) { s = (stud *) malloc( sizeof(stud) ); p->next = s; printf( "輸入第個%d學生的姓名:", i + 1 ); scanf( "%s", s->name ); s->prior = p; s->next = NULL; p
= s; } p->next = NULL; return(h); } stud * search( stud *h, char * x ) { stud *p; char *y; p = h->next; while ( p ) { y = p->name; if ( strcmp( y, x ) == 0 ) return(p); else p = p->next; } printf(
"沒有找到資料\n" ); } void del( stud *p ) { p->next->prior = p->prior; p->prior->next = p->next; free( p ); } void main() { int number; char sname[20]; stud *head, *sp; puts( "請輸入連結串列的大小:" ); scanf( "%d", &number ); head = creat( number ); sp = head->next; printf( "\n現在這個雙向連結串列是:\n" ); while ( sp ) { printf( "%s ", &*(sp->name) ); sp = sp->next; } printf( "\n請輸入你想查詢的姓名:\n" ); scanf( "%s", sname ); sp = search( head, sname ); printf( "你想查詢的姓名是:%s\n", &*(sp->name) ); del( sp ); sp = head->next; printf( "\n現在這個雙向連結串列是:\n" ); while ( sp ) { printf( "%s ", &*(sp->name) ); sp = sp->next; } printf( "\n" ); puts( "\n請按任意鍵退出..." ); }