用c语言怎么实现链式存储?

Lucenedonet 2011-09-20 11:52:44
功能:输入什么,输出什么。
备注:按回车结束输入。

节点一个数据节点,一个指针节点即可。
用结构体存储。

初学者,别笑我。
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lucenedonet 2011-09-20
  • 打赏
  • 举报
回复
偶是弄c#的,最近要研究数据结构。
ouyh12345 2011-09-20
  • 打赏
  • 举报
回复
书上应该有啊
pingdan32 2011-09-20
  • 打赏
  • 举报
回复
随便翻翻数据结构的书,大多数第一章就是关于链表的内容·
turing-complete 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lucenedonet 的回复:]

鄙人不才,刚写出来。

#include <stdio.h>
#include <malloc.h>

struct student
{
char score;
struct student *next;
};

int main()
{
struct student *head,*p,*q;
head =(struct student*)malloc(sizeo……
[/Quote]

祝贺LZ
Lucenedonet 2011-09-20
  • 打赏
  • 举报
回复
鄙人不才,刚写出来。

#include <stdio.h>
#include <malloc.h>

struct student
{
char score;
struct student *next;
};

int main()
{
struct student *head,*p,*q;
head =(struct student*)malloc(sizeof(struct student));
if(!head)
{
printf("wrong!");
return 0;
}
head->score=getchar();
head->next=NULL;
p=head;

while(1)
{
char c=getchar();
if(c=='\n')
break;
q = (struct student*)malloc(sizeof(struct student));
if(!q) return 0;
q->score=c;
p->next=q;
p=q;
p->next=NULL;
}

while(head!=NULL)
{
printf("%c",head->score);
head=head->next;
}
printf("\n");
return 0;
}
君恪 2011-09-20
  • 打赏
  • 举报
回复
随便找本数据结构的书,里面就会有链表的实现。公司电脑里没现成的代码
turing-complete 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lucenedonet 的回复:]

是c语言。
[/Quote]

是你说的C++的人,再说了C您就到C语言专区问呗
Lucenedonet 2011-09-20
  • 打赏
  • 举报
回复
是c语言。
turing-complete 2011-09-20
  • 打赏
  • 举报
回复
先说一下,我这个设计是依照一个特殊需求实现的,故内行看来会认为设计不佳,当然用还是可以用的
#pragma once

#define NULL 0

template<typename T>
class Stack
{

public:

Stack(void);

~Stack(void);

// 查看栈顶元素
T peek(void) const;

// 弹栈,并返回栈顶元素
T pop(void) const;

// 进栈
void push(const T &data) const;

// 栈是否为空
bool empty(void) const;

// 获取栈内元素个数
unsigned int eleCount(void) const;


private:

// 私有构造函数
Stack(T data, Stack<T> *node);

// 私有化复制构造函数
Stack(const Stack<T> &) {}

// 私有化赋值函数
Stack<T>& operator =(const Stack<T> &)
{
return *this
}

// 数据
T data;

// 下一个结点
Stack<T> *next;

// 栈内元素个数
static unsigned int COUNT;// 非线程安全

// 当前的栈顶元素地址
static Stack<T> *pCURRENT;// 非线程安全
};

/* 实现代码:*/

template<typename T>
unsigned int Stack<T>::COUNT = 0;

template<typename T>
Stack<T>* Stack<T>::pCURRENT = NULL;

template<typename T>
Stack<T>::Stack(T para, Stack<T> *node) : data(para)
{
this->next = node;
}

template<typename T>
Stack<T>::Stack(void)
{
Stack(T(), NULL);// 构造函数调用构造函数不能用this?
}

template<typename T>
Stack<T>::~Stack(void)
{
if (COUNT == 0) return;// 栈内有元素则逐个释放
for (Stack<T> *iter(pCURRENT), *temp(NULL); iter != NULL; )
{
temp = iter;
iter = iter->next;
::operator delete(temp);// 释放内存
}
}

template<typename T>
void Stack<T>::push(const T &data) const
{
try
{
Stack<T> *pTop = new Stack<T>(data, pCURRENT);
pCURRENT = pTop;// 更新当前结点
++COUNT;// 栈内元素个数增一
}
catch(std::bad_alloc)
{
std::cerr << "内存分配失败!";
exit(-1);
}
}

template<typename T>
T Stack<T>::peek(void) const
{
if (COUNT == 0)
{
throw std::runtime_error("stack empty!");
}
return pCURRENT->data;
}

template<typename T>
T Stack<T>::pop(void) const
{
if (COUNT == 0)
{
throw std::runtime_error("stack empty!");
}
T result(pCURRENT->data);
Stack<T> *pExpired = pCURRENT;
pCURRENT = pCURRENT->next;// 更新当前栈顶
::operator delete(pExpired);// 释放过期结点
--COUNT;// 栈内元素个数减一
return result;
}

template<typename T>
bool Stack<T>::empty(void) const
{
if (Stack<T>::COUNT == 0)
{
return true;
}
return false;
}

template<typename T>
unsigned int Stack<T>::eleCount(void) const
{
return COUNT;
}



#include "Stack.h"
#include <iostream>
#include <string>

int main()
{
Stack<std::string> sta;
sta.push("100");
sta.push("200");
sta.push("300");
std::cout << sta.eleCount() << std::endl;
std::cout << sta.pop() << std::endl;
std::cout << sta.eleCount() << std::endl;
std::cout << sta.pop() << std::endl;
std::cout << sta.eleCount() << std::endl;
std::cout << sta.pop() << std::endl;
std::cout << sta.eleCount() << std::endl;
}
turing-complete 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lucenedonet 的回复:]

这么简单的问题,C++的人都没有人搞定的?
[/Quote]

不是没人搞,是不屑搞
Lucenedonet 2011-09-20
  • 打赏
  • 举报
回复
这么简单的问题,C++的人都没有人搞定的?

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧